{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "import pandas as pd\n",
    "def load_housing_data(housing_path = '/Users/yanghongyi/Desktop/资料/4.获取数据/代码/'):\n",
    "    csv_path = os.path.join(housing_path,'housing.csv')\n",
    "    return pd.read_csv(csv_path)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>longitude</th>\n",
       "      <th>latitude</th>\n",
       "      <th>housing_median_age</th>\n",
       "      <th>total_rooms</th>\n",
       "      <th>total_bedrooms</th>\n",
       "      <th>population</th>\n",
       "      <th>households</th>\n",
       "      <th>median_income</th>\n",
       "      <th>median_house_value</th>\n",
       "      <th>ocean_proximity</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>-122.23</td>\n",
       "      <td>37.88</td>\n",
       "      <td>41.0</td>\n",
       "      <td>880.0</td>\n",
       "      <td>129.0</td>\n",
       "      <td>322.0</td>\n",
       "      <td>126.0</td>\n",
       "      <td>8.3252</td>\n",
       "      <td>452600.0</td>\n",
       "      <td>NEAR BAY</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>-122.22</td>\n",
       "      <td>37.86</td>\n",
       "      <td>21.0</td>\n",
       "      <td>7099.0</td>\n",
       "      <td>1106.0</td>\n",
       "      <td>2401.0</td>\n",
       "      <td>1138.0</td>\n",
       "      <td>8.3014</td>\n",
       "      <td>358500.0</td>\n",
       "      <td>NEAR BAY</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>-122.24</td>\n",
       "      <td>37.85</td>\n",
       "      <td>52.0</td>\n",
       "      <td>1467.0</td>\n",
       "      <td>190.0</td>\n",
       "      <td>496.0</td>\n",
       "      <td>177.0</td>\n",
       "      <td>7.2574</td>\n",
       "      <td>352100.0</td>\n",
       "      <td>NEAR BAY</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>-122.25</td>\n",
       "      <td>37.85</td>\n",
       "      <td>52.0</td>\n",
       "      <td>1274.0</td>\n",
       "      <td>235.0</td>\n",
       "      <td>558.0</td>\n",
       "      <td>219.0</td>\n",
       "      <td>5.6431</td>\n",
       "      <td>341300.0</td>\n",
       "      <td>NEAR BAY</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>-122.25</td>\n",
       "      <td>37.85</td>\n",
       "      <td>52.0</td>\n",
       "      <td>1627.0</td>\n",
       "      <td>280.0</td>\n",
       "      <td>565.0</td>\n",
       "      <td>259.0</td>\n",
       "      <td>3.8462</td>\n",
       "      <td>342200.0</td>\n",
       "      <td>NEAR BAY</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   longitude  latitude  housing_median_age  total_rooms  total_bedrooms  \\\n",
       "0    -122.23     37.88                41.0        880.0           129.0   \n",
       "1    -122.22     37.86                21.0       7099.0          1106.0   \n",
       "2    -122.24     37.85                52.0       1467.0           190.0   \n",
       "3    -122.25     37.85                52.0       1274.0           235.0   \n",
       "4    -122.25     37.85                52.0       1627.0           280.0   \n",
       "\n",
       "   population  households  median_income  median_house_value ocean_proximity  \n",
       "0       322.0       126.0         8.3252            452600.0        NEAR BAY  \n",
       "1      2401.0      1138.0         8.3014            358500.0        NEAR BAY  \n",
       "2       496.0       177.0         7.2574            352100.0        NEAR BAY  \n",
       "3       558.0       219.0         5.6431            341300.0        NEAR BAY  \n",
       "4       565.0       259.0         3.8462            342200.0        NEAR BAY  "
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "housing = load_housing_data()\n",
    "housing.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(20640, 10)"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "housing.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 20640 entries, 0 to 20639\n",
      "Data columns (total 10 columns):\n",
      " #   Column              Non-Null Count  Dtype  \n",
      "---  ------              --------------  -----  \n",
      " 0   longitude           20640 non-null  float64\n",
      " 1   latitude            20640 non-null  float64\n",
      " 2   housing_median_age  20640 non-null  float64\n",
      " 3   total_rooms         20640 non-null  float64\n",
      " 4   total_bedrooms      20433 non-null  float64\n",
      " 5   population          20640 non-null  float64\n",
      " 6   households          20640 non-null  float64\n",
      " 7   median_income       20640 non-null  float64\n",
      " 8   median_house_value  20640 non-null  float64\n",
      " 9   ocean_proximity     20640 non-null  object \n",
      "dtypes: float64(9), object(1)\n",
      "memory usage: 1.6+ MB\n"
     ]
    }
   ],
   "source": [
    "housing.info() #数据集的简单描述 每个属性的类型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<1H OCEAN     9136\n",
       "INLAND        6551\n",
       "NEAR OCEAN    2658\n",
       "NEAR BAY      2290\n",
       "ISLAND           5\n",
       "Name: ocean_proximity, dtype: int64"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 从上标中可以看到 total_bedrooms 中有一部分空值\n",
    "housing['ocean_proximity'].value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>longitude</th>\n",
       "      <th>latitude</th>\n",
       "      <th>housing_median_age</th>\n",
       "      <th>total_rooms</th>\n",
       "      <th>total_bedrooms</th>\n",
       "      <th>population</th>\n",
       "      <th>households</th>\n",
       "      <th>median_income</th>\n",
       "      <th>median_house_value</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>20640.000000</td>\n",
       "      <td>20640.000000</td>\n",
       "      <td>20640.000000</td>\n",
       "      <td>20640.000000</td>\n",
       "      <td>20433.000000</td>\n",
       "      <td>20640.000000</td>\n",
       "      <td>20640.000000</td>\n",
       "      <td>20640.000000</td>\n",
       "      <td>20640.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>-119.569704</td>\n",
       "      <td>35.631861</td>\n",
       "      <td>28.639486</td>\n",
       "      <td>2635.763081</td>\n",
       "      <td>537.870553</td>\n",
       "      <td>1425.476744</td>\n",
       "      <td>499.539680</td>\n",
       "      <td>3.870671</td>\n",
       "      <td>206855.816909</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>2.003532</td>\n",
       "      <td>2.135952</td>\n",
       "      <td>12.585558</td>\n",
       "      <td>2181.615252</td>\n",
       "      <td>421.385070</td>\n",
       "      <td>1132.462122</td>\n",
       "      <td>382.329753</td>\n",
       "      <td>1.899822</td>\n",
       "      <td>115395.615874</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>-124.350000</td>\n",
       "      <td>32.540000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.499900</td>\n",
       "      <td>14999.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>-121.800000</td>\n",
       "      <td>33.930000</td>\n",
       "      <td>18.000000</td>\n",
       "      <td>1447.750000</td>\n",
       "      <td>296.000000</td>\n",
       "      <td>787.000000</td>\n",
       "      <td>280.000000</td>\n",
       "      <td>2.563400</td>\n",
       "      <td>119600.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>-118.490000</td>\n",
       "      <td>34.260000</td>\n",
       "      <td>29.000000</td>\n",
       "      <td>2127.000000</td>\n",
       "      <td>435.000000</td>\n",
       "      <td>1166.000000</td>\n",
       "      <td>409.000000</td>\n",
       "      <td>3.534800</td>\n",
       "      <td>179700.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>-118.010000</td>\n",
       "      <td>37.710000</td>\n",
       "      <td>37.000000</td>\n",
       "      <td>3148.000000</td>\n",
       "      <td>647.000000</td>\n",
       "      <td>1725.000000</td>\n",
       "      <td>605.000000</td>\n",
       "      <td>4.743250</td>\n",
       "      <td>264725.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>-114.310000</td>\n",
       "      <td>41.950000</td>\n",
       "      <td>52.000000</td>\n",
       "      <td>39320.000000</td>\n",
       "      <td>6445.000000</td>\n",
       "      <td>35682.000000</td>\n",
       "      <td>6082.000000</td>\n",
       "      <td>15.000100</td>\n",
       "      <td>500001.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          longitude      latitude  housing_median_age   total_rooms  \\\n",
       "count  20640.000000  20640.000000        20640.000000  20640.000000   \n",
       "mean    -119.569704     35.631861           28.639486   2635.763081   \n",
       "std        2.003532      2.135952           12.585558   2181.615252   \n",
       "min     -124.350000     32.540000            1.000000      2.000000   \n",
       "25%     -121.800000     33.930000           18.000000   1447.750000   \n",
       "50%     -118.490000     34.260000           29.000000   2127.000000   \n",
       "75%     -118.010000     37.710000           37.000000   3148.000000   \n",
       "max     -114.310000     41.950000           52.000000  39320.000000   \n",
       "\n",
       "       total_bedrooms    population    households  median_income  \\\n",
       "count    20433.000000  20640.000000  20640.000000   20640.000000   \n",
       "mean       537.870553   1425.476744    499.539680       3.870671   \n",
       "std        421.385070   1132.462122    382.329753       1.899822   \n",
       "min          1.000000      3.000000      1.000000       0.499900   \n",
       "25%        296.000000    787.000000    280.000000       2.563400   \n",
       "50%        435.000000   1166.000000    409.000000       3.534800   \n",
       "75%        647.000000   1725.000000    605.000000       4.743250   \n",
       "max       6445.000000  35682.000000   6082.000000      15.000100   \n",
       "\n",
       "       median_house_value  \n",
       "count        20640.000000  \n",
       "mean        206855.816909  \n",
       "std         115395.615874  \n",
       "min          14999.000000  \n",
       "25%         119600.000000  \n",
       "50%         179700.000000  \n",
       "75%         264725.000000  \n",
       "max         500001.000000  "
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "housing.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1440x1080 with 9 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "housing.hist(bins = 50,figsize = (20,15))\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "房龄和房价被设定了上限\n",
    "    设置了上限的区域，重新收集标签值\n",
    "    把设置了上限的区域数据移除\n",
    "重尾 头高尾长\n",
    "    转换数据，把数据形状变成偏钟形分布（正太分布， 平均值为0，标准差为1）\n",
    "收入特征\n",
    "    数据提供的上游证实 是年薪 单位万美元， 提前对特征进行缩放是正常的，需要得知数据是如何缩放的"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "def split_train_test(data,test_ratio):\n",
    "    np.random.seed(42)\n",
    "    indices = np.random.permutation(len(data))\n",
    "    test_set_size = int(len(data)*test_ratio)\n",
    "    test_indices = indices[:test_set_size]\n",
    "    train_indices = indices[test_set_size:]\n",
    "    return data.iloc[train_indices],data.iloc[test_indices]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "16512"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_set,test_set = split_train_test(housing,0.2)\n",
    "len(train_set)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "4128"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(test_set)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 对样本设置唯一表示符，对标识符取hash值，取hash的最后一个字节\n",
    "import hashlib\n",
    "\n",
    "def test_set_check(indentifier,test_radio,hash = hashlib.md5):\n",
    "    return hash(np.int64(identifier)).digest()[-1] < 256 * test_radio"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "def split_train_test_by_id(data,test_ratio,id_column):\n",
    "    ids = data[id_column]\n",
    "    in_test_set = ids.apply(lambda id_:test_set_check(id_,test_ratio))\n",
    "    return data,loc[-in_test_set],data,loc[in_test_set]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>longitude</th>\n",
       "      <th>latitude</th>\n",
       "      <th>housing_median_age</th>\n",
       "      <th>total_rooms</th>\n",
       "      <th>total_bedrooms</th>\n",
       "      <th>population</th>\n",
       "      <th>households</th>\n",
       "      <th>median_income</th>\n",
       "      <th>median_house_value</th>\n",
       "      <th>ocean_proximity</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>14196</th>\n",
       "      <td>-117.03</td>\n",
       "      <td>32.71</td>\n",
       "      <td>33.0</td>\n",
       "      <td>3126.0</td>\n",
       "      <td>627.0</td>\n",
       "      <td>2300.0</td>\n",
       "      <td>623.0</td>\n",
       "      <td>3.2596</td>\n",
       "      <td>103000.0</td>\n",
       "      <td>NEAR OCEAN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8267</th>\n",
       "      <td>-118.16</td>\n",
       "      <td>33.77</td>\n",
       "      <td>49.0</td>\n",
       "      <td>3382.0</td>\n",
       "      <td>787.0</td>\n",
       "      <td>1314.0</td>\n",
       "      <td>756.0</td>\n",
       "      <td>3.8125</td>\n",
       "      <td>382100.0</td>\n",
       "      <td>NEAR OCEAN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17445</th>\n",
       "      <td>-120.48</td>\n",
       "      <td>34.66</td>\n",
       "      <td>4.0</td>\n",
       "      <td>1897.0</td>\n",
       "      <td>331.0</td>\n",
       "      <td>915.0</td>\n",
       "      <td>336.0</td>\n",
       "      <td>4.1563</td>\n",
       "      <td>172600.0</td>\n",
       "      <td>NEAR OCEAN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14265</th>\n",
       "      <td>-117.11</td>\n",
       "      <td>32.69</td>\n",
       "      <td>36.0</td>\n",
       "      <td>1421.0</td>\n",
       "      <td>367.0</td>\n",
       "      <td>1418.0</td>\n",
       "      <td>355.0</td>\n",
       "      <td>1.9425</td>\n",
       "      <td>93400.0</td>\n",
       "      <td>NEAR OCEAN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2271</th>\n",
       "      <td>-119.80</td>\n",
       "      <td>36.78</td>\n",
       "      <td>43.0</td>\n",
       "      <td>2382.0</td>\n",
       "      <td>431.0</td>\n",
       "      <td>874.0</td>\n",
       "      <td>380.0</td>\n",
       "      <td>3.5542</td>\n",
       "      <td>96500.0</td>\n",
       "      <td>INLAND</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       longitude  latitude  housing_median_age  total_rooms  total_bedrooms  \\\n",
       "14196    -117.03     32.71                33.0       3126.0           627.0   \n",
       "8267     -118.16     33.77                49.0       3382.0           787.0   \n",
       "17445    -120.48     34.66                 4.0       1897.0           331.0   \n",
       "14265    -117.11     32.69                36.0       1421.0           367.0   \n",
       "2271     -119.80     36.78                43.0       2382.0           431.0   \n",
       "\n",
       "       population  households  median_income  median_house_value  \\\n",
       "14196      2300.0       623.0         3.2596            103000.0   \n",
       "8267       1314.0       756.0         3.8125            382100.0   \n",
       "17445       915.0       336.0         4.1563            172600.0   \n",
       "14265      1418.0       355.0         1.9425             93400.0   \n",
       "2271        874.0       380.0         3.5542             96500.0   \n",
       "\n",
       "      ocean_proximity  \n",
       "14196      NEAR OCEAN  \n",
       "8267       NEAR OCEAN  \n",
       "17445      NEAR OCEAN  \n",
       "14265      NEAR OCEAN  \n",
       "2271           INLAND  "
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_set.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.model_selection import train_test_split\n",
    "train_set,test_set = train_test_split(housing,test_size = 0.2, random_state = 42)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>longitude</th>\n",
       "      <th>latitude</th>\n",
       "      <th>housing_median_age</th>\n",
       "      <th>total_rooms</th>\n",
       "      <th>total_bedrooms</th>\n",
       "      <th>population</th>\n",
       "      <th>households</th>\n",
       "      <th>median_income</th>\n",
       "      <th>median_house_value</th>\n",
       "      <th>ocean_proximity</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>14196</th>\n",
       "      <td>-117.03</td>\n",
       "      <td>32.71</td>\n",
       "      <td>33.0</td>\n",
       "      <td>3126.0</td>\n",
       "      <td>627.0</td>\n",
       "      <td>2300.0</td>\n",
       "      <td>623.0</td>\n",
       "      <td>3.2596</td>\n",
       "      <td>103000.0</td>\n",
       "      <td>NEAR OCEAN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8267</th>\n",
       "      <td>-118.16</td>\n",
       "      <td>33.77</td>\n",
       "      <td>49.0</td>\n",
       "      <td>3382.0</td>\n",
       "      <td>787.0</td>\n",
       "      <td>1314.0</td>\n",
       "      <td>756.0</td>\n",
       "      <td>3.8125</td>\n",
       "      <td>382100.0</td>\n",
       "      <td>NEAR OCEAN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17445</th>\n",
       "      <td>-120.48</td>\n",
       "      <td>34.66</td>\n",
       "      <td>4.0</td>\n",
       "      <td>1897.0</td>\n",
       "      <td>331.0</td>\n",
       "      <td>915.0</td>\n",
       "      <td>336.0</td>\n",
       "      <td>4.1563</td>\n",
       "      <td>172600.0</td>\n",
       "      <td>NEAR OCEAN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14265</th>\n",
       "      <td>-117.11</td>\n",
       "      <td>32.69</td>\n",
       "      <td>36.0</td>\n",
       "      <td>1421.0</td>\n",
       "      <td>367.0</td>\n",
       "      <td>1418.0</td>\n",
       "      <td>355.0</td>\n",
       "      <td>1.9425</td>\n",
       "      <td>93400.0</td>\n",
       "      <td>NEAR OCEAN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2271</th>\n",
       "      <td>-119.80</td>\n",
       "      <td>36.78</td>\n",
       "      <td>43.0</td>\n",
       "      <td>2382.0</td>\n",
       "      <td>431.0</td>\n",
       "      <td>874.0</td>\n",
       "      <td>380.0</td>\n",
       "      <td>3.5542</td>\n",
       "      <td>96500.0</td>\n",
       "      <td>INLAND</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       longitude  latitude  housing_median_age  total_rooms  total_bedrooms  \\\n",
       "14196    -117.03     32.71                33.0       3126.0           627.0   \n",
       "8267     -118.16     33.77                49.0       3382.0           787.0   \n",
       "17445    -120.48     34.66                 4.0       1897.0           331.0   \n",
       "14265    -117.11     32.69                36.0       1421.0           367.0   \n",
       "2271     -119.80     36.78                43.0       2382.0           431.0   \n",
       "\n",
       "       population  households  median_income  median_house_value  \\\n",
       "14196      2300.0       623.0         3.2596            103000.0   \n",
       "8267       1314.0       756.0         3.8125            382100.0   \n",
       "17445       915.0       336.0         4.1563            172600.0   \n",
       "14265      1418.0       355.0         1.9425             93400.0   \n",
       "2271        874.0       380.0         3.5542             96500.0   \n",
       "\n",
       "      ocean_proximity  \n",
       "14196      NEAR OCEAN  \n",
       "8267       NEAR OCEAN  \n",
       "17445      NEAR OCEAN  \n",
       "14265      NEAR OCEAN  \n",
       "2271           INLAND  "
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_set.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x12c1f8ba8>"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "housing['median_income'].hist()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 希望测试集能够代表整个数据集中不同类型的收入"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "   1.创建一个收入类别属性\n",
    "   2.不应该数据分层过多，但每一层也应有足够的数据量\n",
    "   3.将中位数除以1.5，限制输入类别数量，使用cell取整"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0     5.0\n",
       "1     5.0\n",
       "2     5.0\n",
       "3     4.0\n",
       "4     3.0\n",
       "5     3.0\n",
       "6     3.0\n",
       "7     3.0\n",
       "8     2.0\n",
       "9     3.0\n",
       "10    3.0\n",
       "11    3.0\n",
       "12    3.0\n",
       "13    2.0\n",
       "14    2.0\n",
       "15    2.0\n",
       "16    2.0\n",
       "17    2.0\n",
       "18    2.0\n",
       "19    2.0\n",
       "Name: income_cat, dtype: float64"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import numpy as np\n",
    "housing['income_cat'] = np.ceil(housing['median_income']/1.5)\n",
    "housing['income_cat'].where(housing['income_cat'] < 5, 5.0,inplace = True)\n",
    "housing['income_cat'].head(20)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [],
   "source": [
    "housing['income_cat'] = pd.cut(housing['median_income'],bins = [0.,1.5,3.0,4.5,6.,np.inf],labels = [1,2,3,4,5]) # 将连续值转换为类别标签"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "3    7236\n",
       "2    6581\n",
       "4    3639\n",
       "5    2362\n",
       "1     822\n",
       "Name: income_cat, dtype: int64"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "housing['income_cat'].value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x127a15b00>"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 收入类别直\n",
    "housing['income_cat'].hist()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.model_selection import StratifiedShuffleSplit"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [],
   "source": [
    "split = StratifiedShuffleSplit(n_splits = 1,test_size = 0.2,random_state = 42)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [],
   "source": [
    "for train_index,test_index in split.split(housing,housing['income_cat']):\n",
    "    strate_train_set = housing.loc[train_index]\n",
    "    strate_test_index = housing.loc[test_index]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>longitude</th>\n",
       "      <th>latitude</th>\n",
       "      <th>housing_median_age</th>\n",
       "      <th>total_rooms</th>\n",
       "      <th>total_bedrooms</th>\n",
       "      <th>population</th>\n",
       "      <th>households</th>\n",
       "      <th>median_income</th>\n",
       "      <th>median_house_value</th>\n",
       "      <th>ocean_proximity</th>\n",
       "      <th>income_cat</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>17606</th>\n",
       "      <td>-121.89</td>\n",
       "      <td>37.29</td>\n",
       "      <td>38.0</td>\n",
       "      <td>1568.0</td>\n",
       "      <td>351.0</td>\n",
       "      <td>710.0</td>\n",
       "      <td>339.0</td>\n",
       "      <td>2.7042</td>\n",
       "      <td>286600.0</td>\n",
       "      <td>&lt;1H OCEAN</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18632</th>\n",
       "      <td>-121.93</td>\n",
       "      <td>37.05</td>\n",
       "      <td>14.0</td>\n",
       "      <td>679.0</td>\n",
       "      <td>108.0</td>\n",
       "      <td>306.0</td>\n",
       "      <td>113.0</td>\n",
       "      <td>6.4214</td>\n",
       "      <td>340600.0</td>\n",
       "      <td>&lt;1H OCEAN</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14650</th>\n",
       "      <td>-117.20</td>\n",
       "      <td>32.77</td>\n",
       "      <td>31.0</td>\n",
       "      <td>1952.0</td>\n",
       "      <td>471.0</td>\n",
       "      <td>936.0</td>\n",
       "      <td>462.0</td>\n",
       "      <td>2.8621</td>\n",
       "      <td>196900.0</td>\n",
       "      <td>NEAR OCEAN</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3230</th>\n",
       "      <td>-119.61</td>\n",
       "      <td>36.31</td>\n",
       "      <td>25.0</td>\n",
       "      <td>1847.0</td>\n",
       "      <td>371.0</td>\n",
       "      <td>1460.0</td>\n",
       "      <td>353.0</td>\n",
       "      <td>1.8839</td>\n",
       "      <td>46300.0</td>\n",
       "      <td>INLAND</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3555</th>\n",
       "      <td>-118.59</td>\n",
       "      <td>34.23</td>\n",
       "      <td>17.0</td>\n",
       "      <td>6592.0</td>\n",
       "      <td>1525.0</td>\n",
       "      <td>4459.0</td>\n",
       "      <td>1463.0</td>\n",
       "      <td>3.0347</td>\n",
       "      <td>254500.0</td>\n",
       "      <td>&lt;1H OCEAN</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19480</th>\n",
       "      <td>-120.97</td>\n",
       "      <td>37.66</td>\n",
       "      <td>24.0</td>\n",
       "      <td>2930.0</td>\n",
       "      <td>588.0</td>\n",
       "      <td>1448.0</td>\n",
       "      <td>570.0</td>\n",
       "      <td>3.5395</td>\n",
       "      <td>127900.0</td>\n",
       "      <td>INLAND</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8879</th>\n",
       "      <td>-118.50</td>\n",
       "      <td>34.04</td>\n",
       "      <td>52.0</td>\n",
       "      <td>2233.0</td>\n",
       "      <td>317.0</td>\n",
       "      <td>769.0</td>\n",
       "      <td>277.0</td>\n",
       "      <td>8.3839</td>\n",
       "      <td>500001.0</td>\n",
       "      <td>&lt;1H OCEAN</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13685</th>\n",
       "      <td>-117.24</td>\n",
       "      <td>34.15</td>\n",
       "      <td>26.0</td>\n",
       "      <td>2041.0</td>\n",
       "      <td>293.0</td>\n",
       "      <td>936.0</td>\n",
       "      <td>375.0</td>\n",
       "      <td>6.0000</td>\n",
       "      <td>140200.0</td>\n",
       "      <td>INLAND</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4937</th>\n",
       "      <td>-118.26</td>\n",
       "      <td>33.99</td>\n",
       "      <td>47.0</td>\n",
       "      <td>1865.0</td>\n",
       "      <td>465.0</td>\n",
       "      <td>1916.0</td>\n",
       "      <td>438.0</td>\n",
       "      <td>1.8242</td>\n",
       "      <td>95000.0</td>\n",
       "      <td>&lt;1H OCEAN</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4861</th>\n",
       "      <td>-118.28</td>\n",
       "      <td>34.02</td>\n",
       "      <td>29.0</td>\n",
       "      <td>515.0</td>\n",
       "      <td>229.0</td>\n",
       "      <td>2690.0</td>\n",
       "      <td>217.0</td>\n",
       "      <td>0.4999</td>\n",
       "      <td>500001.0</td>\n",
       "      <td>&lt;1H OCEAN</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16365</th>\n",
       "      <td>-121.31</td>\n",
       "      <td>38.02</td>\n",
       "      <td>24.0</td>\n",
       "      <td>4157.0</td>\n",
       "      <td>951.0</td>\n",
       "      <td>2734.0</td>\n",
       "      <td>879.0</td>\n",
       "      <td>2.7981</td>\n",
       "      <td>92100.0</td>\n",
       "      <td>INLAND</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19684</th>\n",
       "      <td>-121.62</td>\n",
       "      <td>39.14</td>\n",
       "      <td>41.0</td>\n",
       "      <td>2183.0</td>\n",
       "      <td>559.0</td>\n",
       "      <td>1202.0</td>\n",
       "      <td>506.0</td>\n",
       "      <td>1.6902</td>\n",
       "      <td>61500.0</td>\n",
       "      <td>INLAND</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19234</th>\n",
       "      <td>-122.69</td>\n",
       "      <td>38.51</td>\n",
       "      <td>18.0</td>\n",
       "      <td>3364.0</td>\n",
       "      <td>501.0</td>\n",
       "      <td>1442.0</td>\n",
       "      <td>506.0</td>\n",
       "      <td>6.6854</td>\n",
       "      <td>313000.0</td>\n",
       "      <td>&lt;1H OCEAN</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13956</th>\n",
       "      <td>-117.06</td>\n",
       "      <td>34.17</td>\n",
       "      <td>21.0</td>\n",
       "      <td>2520.0</td>\n",
       "      <td>582.0</td>\n",
       "      <td>416.0</td>\n",
       "      <td>151.0</td>\n",
       "      <td>2.7120</td>\n",
       "      <td>89000.0</td>\n",
       "      <td>INLAND</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2390</th>\n",
       "      <td>-119.46</td>\n",
       "      <td>36.91</td>\n",
       "      <td>12.0</td>\n",
       "      <td>2980.0</td>\n",
       "      <td>495.0</td>\n",
       "      <td>1184.0</td>\n",
       "      <td>429.0</td>\n",
       "      <td>3.9141</td>\n",
       "      <td>123900.0</td>\n",
       "      <td>INLAND</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11176</th>\n",
       "      <td>-117.96</td>\n",
       "      <td>33.83</td>\n",
       "      <td>30.0</td>\n",
       "      <td>2838.0</td>\n",
       "      <td>649.0</td>\n",
       "      <td>1758.0</td>\n",
       "      <td>593.0</td>\n",
       "      <td>3.3831</td>\n",
       "      <td>197400.0</td>\n",
       "      <td>&lt;1H OCEAN</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15614</th>\n",
       "      <td>-122.41</td>\n",
       "      <td>37.81</td>\n",
       "      <td>25.0</td>\n",
       "      <td>1178.0</td>\n",
       "      <td>545.0</td>\n",
       "      <td>592.0</td>\n",
       "      <td>441.0</td>\n",
       "      <td>3.6728</td>\n",
       "      <td>500001.0</td>\n",
       "      <td>NEAR BAY</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2953</th>\n",
       "      <td>-119.02</td>\n",
       "      <td>35.35</td>\n",
       "      <td>42.0</td>\n",
       "      <td>1239.0</td>\n",
       "      <td>251.0</td>\n",
       "      <td>776.0</td>\n",
       "      <td>272.0</td>\n",
       "      <td>1.9830</td>\n",
       "      <td>63300.0</td>\n",
       "      <td>INLAND</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13209</th>\n",
       "      <td>-117.72</td>\n",
       "      <td>34.05</td>\n",
       "      <td>8.0</td>\n",
       "      <td>1841.0</td>\n",
       "      <td>409.0</td>\n",
       "      <td>1243.0</td>\n",
       "      <td>394.0</td>\n",
       "      <td>4.0614</td>\n",
       "      <td>107000.0</td>\n",
       "      <td>INLAND</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6569</th>\n",
       "      <td>-118.15</td>\n",
       "      <td>34.20</td>\n",
       "      <td>46.0</td>\n",
       "      <td>1505.0</td>\n",
       "      <td>261.0</td>\n",
       "      <td>857.0</td>\n",
       "      <td>269.0</td>\n",
       "      <td>4.5000</td>\n",
       "      <td>184200.0</td>\n",
       "      <td>INLAND</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       longitude  latitude  housing_median_age  total_rooms  total_bedrooms  \\\n",
       "17606    -121.89     37.29                38.0       1568.0           351.0   \n",
       "18632    -121.93     37.05                14.0        679.0           108.0   \n",
       "14650    -117.20     32.77                31.0       1952.0           471.0   \n",
       "3230     -119.61     36.31                25.0       1847.0           371.0   \n",
       "3555     -118.59     34.23                17.0       6592.0          1525.0   \n",
       "19480    -120.97     37.66                24.0       2930.0           588.0   \n",
       "8879     -118.50     34.04                52.0       2233.0           317.0   \n",
       "13685    -117.24     34.15                26.0       2041.0           293.0   \n",
       "4937     -118.26     33.99                47.0       1865.0           465.0   \n",
       "4861     -118.28     34.02                29.0        515.0           229.0   \n",
       "16365    -121.31     38.02                24.0       4157.0           951.0   \n",
       "19684    -121.62     39.14                41.0       2183.0           559.0   \n",
       "19234    -122.69     38.51                18.0       3364.0           501.0   \n",
       "13956    -117.06     34.17                21.0       2520.0           582.0   \n",
       "2390     -119.46     36.91                12.0       2980.0           495.0   \n",
       "11176    -117.96     33.83                30.0       2838.0           649.0   \n",
       "15614    -122.41     37.81                25.0       1178.0           545.0   \n",
       "2953     -119.02     35.35                42.0       1239.0           251.0   \n",
       "13209    -117.72     34.05                 8.0       1841.0           409.0   \n",
       "6569     -118.15     34.20                46.0       1505.0           261.0   \n",
       "\n",
       "       population  households  median_income  median_house_value  \\\n",
       "17606       710.0       339.0         2.7042            286600.0   \n",
       "18632       306.0       113.0         6.4214            340600.0   \n",
       "14650       936.0       462.0         2.8621            196900.0   \n",
       "3230       1460.0       353.0         1.8839             46300.0   \n",
       "3555       4459.0      1463.0         3.0347            254500.0   \n",
       "19480      1448.0       570.0         3.5395            127900.0   \n",
       "8879        769.0       277.0         8.3839            500001.0   \n",
       "13685       936.0       375.0         6.0000            140200.0   \n",
       "4937       1916.0       438.0         1.8242             95000.0   \n",
       "4861       2690.0       217.0         0.4999            500001.0   \n",
       "16365      2734.0       879.0         2.7981             92100.0   \n",
       "19684      1202.0       506.0         1.6902             61500.0   \n",
       "19234      1442.0       506.0         6.6854            313000.0   \n",
       "13956       416.0       151.0         2.7120             89000.0   \n",
       "2390       1184.0       429.0         3.9141            123900.0   \n",
       "11176      1758.0       593.0         3.3831            197400.0   \n",
       "15614       592.0       441.0         3.6728            500001.0   \n",
       "2953        776.0       272.0         1.9830             63300.0   \n",
       "13209      1243.0       394.0         4.0614            107000.0   \n",
       "6569        857.0       269.0         4.5000            184200.0   \n",
       "\n",
       "      ocean_proximity income_cat  \n",
       "17606       <1H OCEAN          2  \n",
       "18632       <1H OCEAN          5  \n",
       "14650      NEAR OCEAN          2  \n",
       "3230           INLAND          2  \n",
       "3555        <1H OCEAN          3  \n",
       "19480          INLAND          3  \n",
       "8879        <1H OCEAN          5  \n",
       "13685          INLAND          4  \n",
       "4937        <1H OCEAN          2  \n",
       "4861        <1H OCEAN          1  \n",
       "16365          INLAND          2  \n",
       "19684          INLAND          2  \n",
       "19234       <1H OCEAN          5  \n",
       "13956          INLAND          2  \n",
       "2390           INLAND          3  \n",
       "11176       <1H OCEAN          3  \n",
       "15614        NEAR BAY          3  \n",
       "2953           INLAND          2  \n",
       "13209          INLAND          3  \n",
       "6569           INLAND          3  "
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "strate_train_set.head(20)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x12949a4e0>"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x504 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib\n",
    "housing.plot(kind = 'scatter',x = 'longitude',y = 'latitude',alpha = 0.4,\n",
    "            s = housing[\"population\"]/100,label = \"population\",figsize = (10,7),\n",
    "            c = 'median_house_value',cmap = plt.get_cmap(\"jet\"),colorbar = True,sharex = False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.image as mping"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [],
   "source": [
    "#验证不同的特征组合"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [],
   "source": [
    "housing['rooms_per_household'] = housing['total_rooms']/housing['households']\n",
    "housing['bedrooms_per_room'] = housing['total_bedrooms']/housing['total_rooms']\n",
    "housing['population_per_household'] = housing['population']/housing['households']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>longitude</th>\n",
       "      <th>latitude</th>\n",
       "      <th>housing_median_age</th>\n",
       "      <th>total_rooms</th>\n",
       "      <th>total_bedrooms</th>\n",
       "      <th>population</th>\n",
       "      <th>households</th>\n",
       "      <th>median_income</th>\n",
       "      <th>median_house_value</th>\n",
       "      <th>rooms_per_household</th>\n",
       "      <th>bedrooms_per_room</th>\n",
       "      <th>population_per_household</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>longitude</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>-0.924664</td>\n",
       "      <td>-0.108197</td>\n",
       "      <td>0.044568</td>\n",
       "      <td>0.069608</td>\n",
       "      <td>0.099773</td>\n",
       "      <td>0.055310</td>\n",
       "      <td>-0.015176</td>\n",
       "      <td>-0.045967</td>\n",
       "      <td>-0.027540</td>\n",
       "      <td>0.092657</td>\n",
       "      <td>0.002476</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>latitude</th>\n",
       "      <td>-0.924664</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.011173</td>\n",
       "      <td>-0.036100</td>\n",
       "      <td>-0.066983</td>\n",
       "      <td>-0.108785</td>\n",
       "      <td>-0.071035</td>\n",
       "      <td>-0.079809</td>\n",
       "      <td>-0.144160</td>\n",
       "      <td>0.106389</td>\n",
       "      <td>-0.113815</td>\n",
       "      <td>0.002366</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>housing_median_age</th>\n",
       "      <td>-0.108197</td>\n",
       "      <td>0.011173</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>-0.361262</td>\n",
       "      <td>-0.320451</td>\n",
       "      <td>-0.296244</td>\n",
       "      <td>-0.302916</td>\n",
       "      <td>-0.119034</td>\n",
       "      <td>0.105623</td>\n",
       "      <td>-0.153277</td>\n",
       "      <td>0.136089</td>\n",
       "      <td>0.013191</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>total_rooms</th>\n",
       "      <td>0.044568</td>\n",
       "      <td>-0.036100</td>\n",
       "      <td>-0.361262</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.930380</td>\n",
       "      <td>0.857126</td>\n",
       "      <td>0.918484</td>\n",
       "      <td>0.198050</td>\n",
       "      <td>0.134153</td>\n",
       "      <td>0.133798</td>\n",
       "      <td>-0.187900</td>\n",
       "      <td>-0.024581</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>total_bedrooms</th>\n",
       "      <td>0.069608</td>\n",
       "      <td>-0.066983</td>\n",
       "      <td>-0.320451</td>\n",
       "      <td>0.930380</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.877747</td>\n",
       "      <td>0.979728</td>\n",
       "      <td>-0.007723</td>\n",
       "      <td>0.049686</td>\n",
       "      <td>0.001538</td>\n",
       "      <td>0.084238</td>\n",
       "      <td>-0.028355</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>population</th>\n",
       "      <td>0.099773</td>\n",
       "      <td>-0.108785</td>\n",
       "      <td>-0.296244</td>\n",
       "      <td>0.857126</td>\n",
       "      <td>0.877747</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.907222</td>\n",
       "      <td>0.004834</td>\n",
       "      <td>-0.024650</td>\n",
       "      <td>-0.072213</td>\n",
       "      <td>0.035319</td>\n",
       "      <td>0.069863</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>households</th>\n",
       "      <td>0.055310</td>\n",
       "      <td>-0.071035</td>\n",
       "      <td>-0.302916</td>\n",
       "      <td>0.918484</td>\n",
       "      <td>0.979728</td>\n",
       "      <td>0.907222</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.013033</td>\n",
       "      <td>0.065843</td>\n",
       "      <td>-0.080598</td>\n",
       "      <td>0.065087</td>\n",
       "      <td>-0.027309</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>median_income</th>\n",
       "      <td>-0.015176</td>\n",
       "      <td>-0.079809</td>\n",
       "      <td>-0.119034</td>\n",
       "      <td>0.198050</td>\n",
       "      <td>-0.007723</td>\n",
       "      <td>0.004834</td>\n",
       "      <td>0.013033</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.688075</td>\n",
       "      <td>0.326895</td>\n",
       "      <td>-0.615661</td>\n",
       "      <td>0.018766</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>median_house_value</th>\n",
       "      <td>-0.045967</td>\n",
       "      <td>-0.144160</td>\n",
       "      <td>0.105623</td>\n",
       "      <td>0.134153</td>\n",
       "      <td>0.049686</td>\n",
       "      <td>-0.024650</td>\n",
       "      <td>0.065843</td>\n",
       "      <td>0.688075</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.151948</td>\n",
       "      <td>-0.255880</td>\n",
       "      <td>-0.023737</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>rooms_per_household</th>\n",
       "      <td>-0.027540</td>\n",
       "      <td>0.106389</td>\n",
       "      <td>-0.153277</td>\n",
       "      <td>0.133798</td>\n",
       "      <td>0.001538</td>\n",
       "      <td>-0.072213</td>\n",
       "      <td>-0.080598</td>\n",
       "      <td>0.326895</td>\n",
       "      <td>0.151948</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>-0.416952</td>\n",
       "      <td>-0.004852</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>bedrooms_per_room</th>\n",
       "      <td>0.092657</td>\n",
       "      <td>-0.113815</td>\n",
       "      <td>0.136089</td>\n",
       "      <td>-0.187900</td>\n",
       "      <td>0.084238</td>\n",
       "      <td>0.035319</td>\n",
       "      <td>0.065087</td>\n",
       "      <td>-0.615661</td>\n",
       "      <td>-0.255880</td>\n",
       "      <td>-0.416952</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.002938</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>population_per_household</th>\n",
       "      <td>0.002476</td>\n",
       "      <td>0.002366</td>\n",
       "      <td>0.013191</td>\n",
       "      <td>-0.024581</td>\n",
       "      <td>-0.028355</td>\n",
       "      <td>0.069863</td>\n",
       "      <td>-0.027309</td>\n",
       "      <td>0.018766</td>\n",
       "      <td>-0.023737</td>\n",
       "      <td>-0.004852</td>\n",
       "      <td>0.002938</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                          longitude  latitude  housing_median_age  \\\n",
       "longitude                  1.000000 -0.924664           -0.108197   \n",
       "latitude                  -0.924664  1.000000            0.011173   \n",
       "housing_median_age        -0.108197  0.011173            1.000000   \n",
       "total_rooms                0.044568 -0.036100           -0.361262   \n",
       "total_bedrooms             0.069608 -0.066983           -0.320451   \n",
       "population                 0.099773 -0.108785           -0.296244   \n",
       "households                 0.055310 -0.071035           -0.302916   \n",
       "median_income             -0.015176 -0.079809           -0.119034   \n",
       "median_house_value        -0.045967 -0.144160            0.105623   \n",
       "rooms_per_household       -0.027540  0.106389           -0.153277   \n",
       "bedrooms_per_room          0.092657 -0.113815            0.136089   \n",
       "population_per_household   0.002476  0.002366            0.013191   \n",
       "\n",
       "                          total_rooms  total_bedrooms  population  households  \\\n",
       "longitude                    0.044568        0.069608    0.099773    0.055310   \n",
       "latitude                    -0.036100       -0.066983   -0.108785   -0.071035   \n",
       "housing_median_age          -0.361262       -0.320451   -0.296244   -0.302916   \n",
       "total_rooms                  1.000000        0.930380    0.857126    0.918484   \n",
       "total_bedrooms               0.930380        1.000000    0.877747    0.979728   \n",
       "population                   0.857126        0.877747    1.000000    0.907222   \n",
       "households                   0.918484        0.979728    0.907222    1.000000   \n",
       "median_income                0.198050       -0.007723    0.004834    0.013033   \n",
       "median_house_value           0.134153        0.049686   -0.024650    0.065843   \n",
       "rooms_per_household          0.133798        0.001538   -0.072213   -0.080598   \n",
       "bedrooms_per_room           -0.187900        0.084238    0.035319    0.065087   \n",
       "population_per_household    -0.024581       -0.028355    0.069863   -0.027309   \n",
       "\n",
       "                          median_income  median_house_value  \\\n",
       "longitude                     -0.015176           -0.045967   \n",
       "latitude                      -0.079809           -0.144160   \n",
       "housing_median_age            -0.119034            0.105623   \n",
       "total_rooms                    0.198050            0.134153   \n",
       "total_bedrooms                -0.007723            0.049686   \n",
       "population                     0.004834           -0.024650   \n",
       "households                     0.013033            0.065843   \n",
       "median_income                  1.000000            0.688075   \n",
       "median_house_value             0.688075            1.000000   \n",
       "rooms_per_household            0.326895            0.151948   \n",
       "bedrooms_per_room             -0.615661           -0.255880   \n",
       "population_per_household       0.018766           -0.023737   \n",
       "\n",
       "                          rooms_per_household  bedrooms_per_room  \\\n",
       "longitude                           -0.027540           0.092657   \n",
       "latitude                             0.106389          -0.113815   \n",
       "housing_median_age                  -0.153277           0.136089   \n",
       "total_rooms                          0.133798          -0.187900   \n",
       "total_bedrooms                       0.001538           0.084238   \n",
       "population                          -0.072213           0.035319   \n",
       "households                          -0.080598           0.065087   \n",
       "median_income                        0.326895          -0.615661   \n",
       "median_house_value                   0.151948          -0.255880   \n",
       "rooms_per_household                  1.000000          -0.416952   \n",
       "bedrooms_per_room                   -0.416952           1.000000   \n",
       "population_per_household            -0.004852           0.002938   \n",
       "\n",
       "                          population_per_household  \n",
       "longitude                                 0.002476  \n",
       "latitude                                  0.002366  \n",
       "housing_median_age                        0.013191  \n",
       "total_rooms                              -0.024581  \n",
       "total_bedrooms                           -0.028355  \n",
       "population                                0.069863  \n",
       "households                               -0.027309  \n",
       "median_income                             0.018766  \n",
       "median_house_value                       -0.023737  \n",
       "rooms_per_household                      -0.004852  \n",
       "bedrooms_per_room                         0.002938  \n",
       "population_per_household                  1.000000  "
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 寻找特征相关性 corr\n",
    "corr_matrix = housing.corr()\n",
    "corr_matrix"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "median_house_value          1.000000\n",
       "median_income               0.688075\n",
       "rooms_per_household         0.151948\n",
       "total_rooms                 0.134153\n",
       "housing_median_age          0.105623\n",
       "households                  0.065843\n",
       "total_bedrooms              0.049686\n",
       "population_per_household   -0.023737\n",
       "population                 -0.024650\n",
       "longitude                  -0.045967\n",
       "latitude                   -0.144160\n",
       "bedrooms_per_room          -0.255880\n",
       "Name: median_house_value, dtype: float64"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "corr_matrix['median_house_value'].sort_values(ascending = False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>longitude</th>\n",
       "      <th>latitude</th>\n",
       "      <th>housing_median_age</th>\n",
       "      <th>total_rooms</th>\n",
       "      <th>total_bedrooms</th>\n",
       "      <th>population</th>\n",
       "      <th>households</th>\n",
       "      <th>median_income</th>\n",
       "      <th>median_house_value</th>\n",
       "      <th>ocean_proximity</th>\n",
       "      <th>income_cat</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>17606</th>\n",
       "      <td>-121.89</td>\n",
       "      <td>37.29</td>\n",
       "      <td>38.0</td>\n",
       "      <td>1568.0</td>\n",
       "      <td>351.0</td>\n",
       "      <td>710.0</td>\n",
       "      <td>339.0</td>\n",
       "      <td>2.7042</td>\n",
       "      <td>286600.0</td>\n",
       "      <td>&lt;1H OCEAN</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18632</th>\n",
       "      <td>-121.93</td>\n",
       "      <td>37.05</td>\n",
       "      <td>14.0</td>\n",
       "      <td>679.0</td>\n",
       "      <td>108.0</td>\n",
       "      <td>306.0</td>\n",
       "      <td>113.0</td>\n",
       "      <td>6.4214</td>\n",
       "      <td>340600.0</td>\n",
       "      <td>&lt;1H OCEAN</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14650</th>\n",
       "      <td>-117.20</td>\n",
       "      <td>32.77</td>\n",
       "      <td>31.0</td>\n",
       "      <td>1952.0</td>\n",
       "      <td>471.0</td>\n",
       "      <td>936.0</td>\n",
       "      <td>462.0</td>\n",
       "      <td>2.8621</td>\n",
       "      <td>196900.0</td>\n",
       "      <td>NEAR OCEAN</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3230</th>\n",
       "      <td>-119.61</td>\n",
       "      <td>36.31</td>\n",
       "      <td>25.0</td>\n",
       "      <td>1847.0</td>\n",
       "      <td>371.0</td>\n",
       "      <td>1460.0</td>\n",
       "      <td>353.0</td>\n",
       "      <td>1.8839</td>\n",
       "      <td>46300.0</td>\n",
       "      <td>INLAND</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3555</th>\n",
       "      <td>-118.59</td>\n",
       "      <td>34.23</td>\n",
       "      <td>17.0</td>\n",
       "      <td>6592.0</td>\n",
       "      <td>1525.0</td>\n",
       "      <td>4459.0</td>\n",
       "      <td>1463.0</td>\n",
       "      <td>3.0347</td>\n",
       "      <td>254500.0</td>\n",
       "      <td>&lt;1H OCEAN</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       longitude  latitude  housing_median_age  total_rooms  total_bedrooms  \\\n",
       "17606    -121.89     37.29                38.0       1568.0           351.0   \n",
       "18632    -121.93     37.05                14.0        679.0           108.0   \n",
       "14650    -117.20     32.77                31.0       1952.0           471.0   \n",
       "3230     -119.61     36.31                25.0       1847.0           371.0   \n",
       "3555     -118.59     34.23                17.0       6592.0          1525.0   \n",
       "\n",
       "       population  households  median_income  median_house_value  \\\n",
       "17606       710.0       339.0         2.7042            286600.0   \n",
       "18632       306.0       113.0         6.4214            340600.0   \n",
       "14650       936.0       462.0         2.8621            196900.0   \n",
       "3230       1460.0       353.0         1.8839             46300.0   \n",
       "3555       4459.0      1463.0         3.0347            254500.0   \n",
       "\n",
       "      ocean_proximity income_cat  \n",
       "17606       <1H OCEAN          2  \n",
       "18632       <1H OCEAN          5  \n",
       "14650      NEAR OCEAN          2  \n",
       "3230           INLAND          2  \n",
       "3555        <1H OCEAN          3  "
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 得到分层抽样代表全局数据集 训练集于测试集\n",
    "strate_train_set.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [],
   "source": [
    "housing_labels = strate_train_set['median_house_value'].copy()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [],
   "source": [
    "housing = strate_train_set.drop('median_house_value',axis = 1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Int64Index: 16512 entries, 17606 to 15775\n",
      "Data columns (total 10 columns):\n",
      " #   Column              Non-Null Count  Dtype   \n",
      "---  ------              --------------  -----   \n",
      " 0   longitude           16512 non-null  float64 \n",
      " 1   latitude            16512 non-null  float64 \n",
      " 2   housing_median_age  16512 non-null  float64 \n",
      " 3   total_rooms         16512 non-null  float64 \n",
      " 4   total_bedrooms      16354 non-null  float64 \n",
      " 5   population          16512 non-null  float64 \n",
      " 6   households          16512 non-null  float64 \n",
      " 7   median_income       16512 non-null  float64 \n",
      " 8   ocean_proximity     16512 non-null  object  \n",
      " 9   income_cat          16512 non-null  category\n",
      "dtypes: category(1), float64(8), object(1)\n",
      "memory usage: 1.3+ MB\n"
     ]
    }
   ],
   "source": [
    "housing.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>longitude</th>\n",
       "      <th>latitude</th>\n",
       "      <th>housing_median_age</th>\n",
       "      <th>total_rooms</th>\n",
       "      <th>total_bedrooms</th>\n",
       "      <th>population</th>\n",
       "      <th>households</th>\n",
       "      <th>median_income</th>\n",
       "      <th>ocean_proximity</th>\n",
       "      <th>income_cat</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>4629</th>\n",
       "      <td>-118.30</td>\n",
       "      <td>34.07</td>\n",
       "      <td>18.0</td>\n",
       "      <td>3759.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>3296.0</td>\n",
       "      <td>1462.0</td>\n",
       "      <td>2.2708</td>\n",
       "      <td>&lt;1H OCEAN</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6068</th>\n",
       "      <td>-117.86</td>\n",
       "      <td>34.01</td>\n",
       "      <td>16.0</td>\n",
       "      <td>4632.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>3038.0</td>\n",
       "      <td>727.0</td>\n",
       "      <td>5.1762</td>\n",
       "      <td>&lt;1H OCEAN</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17923</th>\n",
       "      <td>-121.97</td>\n",
       "      <td>37.35</td>\n",
       "      <td>30.0</td>\n",
       "      <td>1955.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>999.0</td>\n",
       "      <td>386.0</td>\n",
       "      <td>4.6328</td>\n",
       "      <td>&lt;1H OCEAN</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13656</th>\n",
       "      <td>-117.30</td>\n",
       "      <td>34.05</td>\n",
       "      <td>6.0</td>\n",
       "      <td>2155.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1039.0</td>\n",
       "      <td>391.0</td>\n",
       "      <td>1.6675</td>\n",
       "      <td>INLAND</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19252</th>\n",
       "      <td>-122.79</td>\n",
       "      <td>38.48</td>\n",
       "      <td>7.0</td>\n",
       "      <td>6837.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>3468.0</td>\n",
       "      <td>1405.0</td>\n",
       "      <td>3.1662</td>\n",
       "      <td>&lt;1H OCEAN</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       longitude  latitude  housing_median_age  total_rooms  total_bedrooms  \\\n",
       "4629     -118.30     34.07                18.0       3759.0             NaN   \n",
       "6068     -117.86     34.01                16.0       4632.0             NaN   \n",
       "17923    -121.97     37.35                30.0       1955.0             NaN   \n",
       "13656    -117.30     34.05                 6.0       2155.0             NaN   \n",
       "19252    -122.79     38.48                 7.0       6837.0             NaN   \n",
       "\n",
       "       population  households  median_income ocean_proximity income_cat  \n",
       "4629       3296.0      1462.0         2.2708       <1H OCEAN          2  \n",
       "6068       3038.0       727.0         5.1762       <1H OCEAN          4  \n",
       "17923       999.0       386.0         4.6328       <1H OCEAN          4  \n",
       "13656      1039.0       391.0         1.6675          INLAND          2  \n",
       "19252      3468.0      1405.0         3.1662       <1H OCEAN          3  "
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "rows = housing[housing.isnull().any(axis = 1)]\n",
    "rows.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [],
   "source": [
    "# rows.dropna(subset = ['total_bedrooms'])\n",
    "# 将缺失值用·平均值或中位数替代\n",
    "from sklearn.preprocessing import Imputer as SimpleImputer"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Imputer(axis=0, copy=True, missing_values='NaN', strategy='median', verbose=0)"
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "imputer = SimpleImputer(strategy = 'median')\n",
    "housing_num = housing.drop('ocean_proximity',axis = 1)\n",
    "imputer.fit(housing_num)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([-118.51  ,   34.26  ,   29.    , 2119.5   ,  433.    , 1164.    ,\n",
       "        408.    ,    3.5409,    3.    ])"
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "imputer.statistics_"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "将地理数据可视化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Imputer(axis=0, copy=True, missing_values='NaN', strategy='median', verbose=0)"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.preprocessing import Imputer as SimpleImputer\n",
    "\n",
    "imputer = SimpleImputer(strategy = 'median')\n",
    "\n",
    "# 使用fit() 方法将 imputer实例适配到训练集\n",
    "housing_num = housing.drop('ocean_proximity', axis =1)\n",
    "\n",
    "imputer.fit(housing_num)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([-118.51  ,   34.26  ,   29.    , 2119.5   ,  433.    , 1164.    ,\n",
       "        408.    ,    3.5409,    3.    ])"
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "imputer.statistics_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([-118.51  ,   34.26  ,   29.    , 2119.5   ,  433.    , 1164.    ,\n",
       "        408.    ,    3.5409,    3.    ])"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "housing_num.median().values"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[-121.89  ,   37.29  ,   38.    , ...,  339.    ,    2.7042,\n",
       "           2.    ],\n",
       "       [-121.93  ,   37.05  ,   14.    , ...,  113.    ,    6.4214,\n",
       "           5.    ],\n",
       "       [-117.2   ,   32.77  ,   31.    , ...,  462.    ,    2.8621,\n",
       "           2.    ],\n",
       "       ...,\n",
       "       [-116.4   ,   34.09  ,    9.    , ...,  765.    ,    3.2723,\n",
       "           3.    ],\n",
       "       [-118.01  ,   33.82  ,   31.    , ...,  356.    ,    4.0625,\n",
       "           3.    ],\n",
       "       [-122.45  ,   37.77  ,   52.    , ...,  639.    ,    3.575 ,\n",
       "           3.    ]])"
      ]
     },
     "execution_count": 46,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X = imputer.transform(housing_num)\n",
    "X"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>longitude</th>\n",
       "      <th>latitude</th>\n",
       "      <th>housing_median_age</th>\n",
       "      <th>total_rooms</th>\n",
       "      <th>total_bedrooms</th>\n",
       "      <th>population</th>\n",
       "      <th>households</th>\n",
       "      <th>median_income</th>\n",
       "      <th>income_cat</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>17606</th>\n",
       "      <td>-121.89</td>\n",
       "      <td>37.29</td>\n",
       "      <td>38.0</td>\n",
       "      <td>1568.0</td>\n",
       "      <td>351.0</td>\n",
       "      <td>710.0</td>\n",
       "      <td>339.0</td>\n",
       "      <td>2.7042</td>\n",
       "      <td>2.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18632</th>\n",
       "      <td>-121.93</td>\n",
       "      <td>37.05</td>\n",
       "      <td>14.0</td>\n",
       "      <td>679.0</td>\n",
       "      <td>108.0</td>\n",
       "      <td>306.0</td>\n",
       "      <td>113.0</td>\n",
       "      <td>6.4214</td>\n",
       "      <td>5.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14650</th>\n",
       "      <td>-117.20</td>\n",
       "      <td>32.77</td>\n",
       "      <td>31.0</td>\n",
       "      <td>1952.0</td>\n",
       "      <td>471.0</td>\n",
       "      <td>936.0</td>\n",
       "      <td>462.0</td>\n",
       "      <td>2.8621</td>\n",
       "      <td>2.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3230</th>\n",
       "      <td>-119.61</td>\n",
       "      <td>36.31</td>\n",
       "      <td>25.0</td>\n",
       "      <td>1847.0</td>\n",
       "      <td>371.0</td>\n",
       "      <td>1460.0</td>\n",
       "      <td>353.0</td>\n",
       "      <td>1.8839</td>\n",
       "      <td>2.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3555</th>\n",
       "      <td>-118.59</td>\n",
       "      <td>34.23</td>\n",
       "      <td>17.0</td>\n",
       "      <td>6592.0</td>\n",
       "      <td>1525.0</td>\n",
       "      <td>4459.0</td>\n",
       "      <td>1463.0</td>\n",
       "      <td>3.0347</td>\n",
       "      <td>3.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       longitude  latitude  housing_median_age  total_rooms  total_bedrooms  \\\n",
       "17606    -121.89     37.29                38.0       1568.0           351.0   \n",
       "18632    -121.93     37.05                14.0        679.0           108.0   \n",
       "14650    -117.20     32.77                31.0       1952.0           471.0   \n",
       "3230     -119.61     36.31                25.0       1847.0           371.0   \n",
       "3555     -118.59     34.23                17.0       6592.0          1525.0   \n",
       "\n",
       "       population  households  median_income  income_cat  \n",
       "17606       710.0       339.0         2.7042         2.0  \n",
       "18632       306.0       113.0         6.4214         5.0  \n",
       "14650       936.0       462.0         2.8621         2.0  \n",
       "3230       1460.0       353.0         1.8839         2.0  \n",
       "3555       4459.0      1463.0         3.0347         3.0  "
      ]
     },
     "execution_count": 47,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "housing_tr = pd.DataFrame(X, columns = housing_num.columns, index = housing_num.index)\n",
    "housing_tr.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Int64Index: 16512 entries, 17606 to 15775\n",
      "Data columns (total 9 columns):\n",
      " #   Column              Non-Null Count  Dtype  \n",
      "---  ------              --------------  -----  \n",
      " 0   longitude           16512 non-null  float64\n",
      " 1   latitude            16512 non-null  float64\n",
      " 2   housing_median_age  16512 non-null  float64\n",
      " 3   total_rooms         16512 non-null  float64\n",
      " 4   total_bedrooms      16512 non-null  float64\n",
      " 5   population          16512 non-null  float64\n",
      " 6   households          16512 non-null  float64\n",
      " 7   median_income       16512 non-null  float64\n",
      " 8   income_cat          16512 non-null  float64\n",
      "dtypes: float64(9)\n",
      "memory usage: 1.3 MB\n"
     ]
    }
   ],
   "source": [
    "housing_tr.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "scikit-learn"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "处理文本和分类属性"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>ocean_proximity</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>17606</th>\n",
       "      <td>&lt;1H OCEAN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18632</th>\n",
       "      <td>&lt;1H OCEAN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14650</th>\n",
       "      <td>NEAR OCEAN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3230</th>\n",
       "      <td>INLAND</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3555</th>\n",
       "      <td>&lt;1H OCEAN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19480</th>\n",
       "      <td>INLAND</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8879</th>\n",
       "      <td>&lt;1H OCEAN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13685</th>\n",
       "      <td>INLAND</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4937</th>\n",
       "      <td>&lt;1H OCEAN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4861</th>\n",
       "      <td>&lt;1H OCEAN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      ocean_proximity\n",
       "17606       <1H OCEAN\n",
       "18632       <1H OCEAN\n",
       "14650      NEAR OCEAN\n",
       "3230           INLAND\n",
       "3555        <1H OCEAN\n",
       "19480          INLAND\n",
       "8879        <1H OCEAN\n",
       "13685          INLAND\n",
       "4937        <1H OCEAN\n",
       "4861        <1H OCEAN"
      ]
     },
     "execution_count": 49,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "housing_cat = housing[['ocean_proximity']]\n",
    "housing_cat.head(10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<1H OCEAN     7276\n",
       "INLAND        5263\n",
       "NEAR OCEAN    2124\n",
       "NEAR BAY      1847\n",
       "ISLAND           2\n",
       "Name: ocean_proximity, dtype: int64"
      ]
     },
     "execution_count": 50,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "housing['ocean_proximity'].value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0, 0, 4, ..., 1, 0, 3])"
      ]
     },
     "execution_count": 51,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 将文本转化成对应的数字分类\n",
    "from sklearn.preprocessing import LabelEncoder\n",
    "encoder = LabelEncoder()\n",
    "housing_cat = housing['ocean_proximity']\n",
    "housing_cat_encoder = encoder.fit_transform(housing_cat)\n",
    "housing_cat_encoder"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array(['<1H OCEAN', 'INLAND', 'ISLAND', 'NEAR BAY', 'NEAR OCEAN'],\n",
       "      dtype=object)"
      ]
     },
     "execution_count": 52,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "encoder.classes_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.preprocessing import OneHotEncoder\n",
    "encoder = OneHotEncoder()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0, 0, 4, ..., 1, 0, 3])"
      ]
     },
     "execution_count": 54,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "housing_cat_encoder"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[0],\n",
       "       [0],\n",
       "       [4],\n",
       "       ...,\n",
       "       [1],\n",
       "       [0],\n",
       "       [3]])"
      ]
     },
     "execution_count": 55,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "housing_cat_encoder.reshape(-1, 1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<16512x5 sparse matrix of type '<class 'numpy.float64'>'\n",
       "\twith 16512 stored elements in Compressed Sparse Row format>"
      ]
     },
     "execution_count": 56,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "housing_cat_hot = encoder.fit_transform(housing_cat_encoder.reshape(-1, 1))\n",
    "housing_cat_hot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[1., 0., 0., 0., 0.],\n",
       "       [1., 0., 0., 0., 0.],\n",
       "       [0., 0., 0., 0., 1.],\n",
       "       ...,\n",
       "       [0., 1., 0., 0., 0.],\n",
       "       [1., 0., 0., 0., 0.],\n",
       "       [0., 0., 0., 1., 0.]])"
      ]
     },
     "execution_count": 57,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 从稀疏矩阵转换成numpy\n",
    "housing_cat_hot.toarray()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[1, 0, 0, 0, 0],\n",
       "       [1, 0, 0, 0, 0],\n",
       "       [0, 0, 0, 0, 1],\n",
       "       ...,\n",
       "       [0, 1, 0, 0, 0],\n",
       "       [1, 0, 0, 0, 0],\n",
       "       [0, 0, 0, 1, 0]])"
      ]
     },
     "execution_count": 58,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 一次完成两个转换 文本--整数类型--独热类型\n",
    "housing_cat\n",
    "from sklearn.preprocessing import LabelBinarizer\n",
    "encoder = LabelBinarizer()\n",
    "housing_cat_1hot = encoder.fit_transform(housing_cat)\n",
    "housing_cat_1hot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<16512x5 sparse matrix of type '<class 'numpy.int64'>'\n",
       "\twith 16512 stored elements in Compressed Sparse Row format>"
      ]
     },
     "execution_count": 59,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 输出稀疏矩阵\n",
    "\n",
    "from sklearn.preprocessing import LabelBinarizer\n",
    "encoder = LabelBinarizer(sparse_output = True)\n",
    "housing_cat_1hot = encoder.fit_transform(housing_cat)\n",
    "housing_cat_1hot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[1, 0, 0, 0, 0],\n",
       "       [1, 0, 0, 0, 0],\n",
       "       [0, 0, 0, 0, 1],\n",
       "       ...,\n",
       "       [0, 1, 0, 0, 0],\n",
       "       [1, 0, 0, 0, 0],\n",
       "       [0, 0, 0, 1, 0]])"
      ]
     },
     "execution_count": 60,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 一次完成两个转换 文本--整数类型--独热类型\n",
    "housing_cat\n",
    "from sklearn.preprocessing import LabelBinarizer\n",
    "encoder = LabelBinarizer()\n",
    "housing_cat_1hot = encoder.fit_transform(housing_cat)\n",
    "housing_cat_1hot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<16512x5 sparse matrix of type '<class 'numpy.int64'>'\n",
       "\twith 16512 stored elements in Compressed Sparse Row format>"
      ]
     },
     "execution_count": 61,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 输出稀疏矩阵\n",
    "from sklearn.preprocessing import LabelBinarizer\n",
    "encoder = LabelBinarizer(sparse_output = True)\n",
    "housing_cat_1hot = encoder.fit_transform(housing_cat)\n",
    "housing_cat_1hot"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "自定义转换器"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.base import BaseEstimator, TransformerMixin\n",
    "\n",
    "\n",
    "rooms_ix, bedrooms_ix, population_ix, household_ix = [list(housing.columns).index(col) for col in (\"total_rooms\", \"total_bedrooms\", \"population\", \"households\")]\n",
    "rooms_ix, bedrooms_ix, population_ix, household_ix \n",
    "class CombinedAttributesAdder(BaseEstimator, TransformerMixin):\n",
    "    def __init__(self, add_bedrooms_per_room = True):\n",
    "        self.add_bedrooms_per_room = add_bedrooms_per_room\n",
    "    def fit(self, X, y = None):\n",
    "        return self\n",
    "    def transform(self, X, y = None):\n",
    "        rooms_per_household = X[:, rooms_ix] / X[:, household_ix]\n",
    "        population_per_household = X[:, population_ix] / X[:, household_ix]\n",
    "        if self.add_bedrooms_per_room:\n",
    "            bedrooms_per_room = X[:, bedrooms_ix] / X[:, rooms_ix]\n",
    "            return np.c_[X, rooms_per_household,population_per_household, bedrooms_per_room]\n",
    "        else:\n",
    "            return np.c_[X, rooms_per_household,population_per_household]\n",
    "        \n",
    "        \n",
    "        \n",
    "attr_adder = CombinedAttributesAdder(add_bedrooms_per_room = False)\n",
    "housing_extra_attribs = attr_adder.transform(housing.values)\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[-121.89, 37.29, 38.0, ..., 2, 4.625368731563422,\n",
       "        2.094395280235988],\n",
       "       [-121.93, 37.05, 14.0, ..., 5, 6.008849557522124,\n",
       "        2.7079646017699117],\n",
       "       [-117.2, 32.77, 31.0, ..., 2, 4.225108225108225,\n",
       "        2.0259740259740258],\n",
       "       ...,\n",
       "       [-116.4, 34.09, 9.0, ..., 3, 6.34640522875817, 2.742483660130719],\n",
       "       [-118.01, 33.82, 31.0, ..., 3, 5.50561797752809,\n",
       "        3.808988764044944],\n",
       "       [-122.45, 37.77, 52.0, ..., 3, 4.843505477308295,\n",
       "        1.9859154929577465]], dtype=object)"
      ]
     },
     "execution_count": 63,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "housing_extra_attribs"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "      <th>4</th>\n",
       "      <th>5</th>\n",
       "      <th>6</th>\n",
       "      <th>7</th>\n",
       "      <th>8</th>\n",
       "      <th>9</th>\n",
       "      <th>10</th>\n",
       "      <th>11</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>-121.89</td>\n",
       "      <td>37.29</td>\n",
       "      <td>38</td>\n",
       "      <td>1568</td>\n",
       "      <td>351</td>\n",
       "      <td>710</td>\n",
       "      <td>339</td>\n",
       "      <td>2.7042</td>\n",
       "      <td>&lt;1H OCEAN</td>\n",
       "      <td>2</td>\n",
       "      <td>4.62537</td>\n",
       "      <td>2.0944</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>-121.93</td>\n",
       "      <td>37.05</td>\n",
       "      <td>14</td>\n",
       "      <td>679</td>\n",
       "      <td>108</td>\n",
       "      <td>306</td>\n",
       "      <td>113</td>\n",
       "      <td>6.4214</td>\n",
       "      <td>&lt;1H OCEAN</td>\n",
       "      <td>5</td>\n",
       "      <td>6.00885</td>\n",
       "      <td>2.70796</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>-117.2</td>\n",
       "      <td>32.77</td>\n",
       "      <td>31</td>\n",
       "      <td>1952</td>\n",
       "      <td>471</td>\n",
       "      <td>936</td>\n",
       "      <td>462</td>\n",
       "      <td>2.8621</td>\n",
       "      <td>NEAR OCEAN</td>\n",
       "      <td>2</td>\n",
       "      <td>4.22511</td>\n",
       "      <td>2.02597</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>-119.61</td>\n",
       "      <td>36.31</td>\n",
       "      <td>25</td>\n",
       "      <td>1847</td>\n",
       "      <td>371</td>\n",
       "      <td>1460</td>\n",
       "      <td>353</td>\n",
       "      <td>1.8839</td>\n",
       "      <td>INLAND</td>\n",
       "      <td>2</td>\n",
       "      <td>5.23229</td>\n",
       "      <td>4.13598</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>-118.59</td>\n",
       "      <td>34.23</td>\n",
       "      <td>17</td>\n",
       "      <td>6592</td>\n",
       "      <td>1525</td>\n",
       "      <td>4459</td>\n",
       "      <td>1463</td>\n",
       "      <td>3.0347</td>\n",
       "      <td>&lt;1H OCEAN</td>\n",
       "      <td>3</td>\n",
       "      <td>4.50581</td>\n",
       "      <td>3.04785</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        0      1   2     3     4     5     6       7           8  9       10  \\\n",
       "0 -121.89  37.29  38  1568   351   710   339  2.7042   <1H OCEAN  2  4.62537   \n",
       "1 -121.93  37.05  14   679   108   306   113  6.4214   <1H OCEAN  5  6.00885   \n",
       "2  -117.2  32.77  31  1952   471   936   462  2.8621  NEAR OCEAN  2  4.22511   \n",
       "3 -119.61  36.31  25  1847   371  1460   353  1.8839      INLAND  2  5.23229   \n",
       "4 -118.59  34.23  17  6592  1525  4459  1463  3.0347   <1H OCEAN  3  4.50581   \n",
       "\n",
       "        11  \n",
       "0   2.0944  \n",
       "1  2.70796  \n",
       "2  2.02597  \n",
       "3  4.13598  \n",
       "4  3.04785  "
      ]
     },
     "execution_count": 64,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "housing_tr = pd.DataFrame(housing_extra_attribs)\n",
    "housing_tr.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>longitude</th>\n",
       "      <th>latitude</th>\n",
       "      <th>housing_median_age</th>\n",
       "      <th>total_rooms</th>\n",
       "      <th>total_bedrooms</th>\n",
       "      <th>population</th>\n",
       "      <th>households</th>\n",
       "      <th>median_income</th>\n",
       "      <th>ocean_proximity</th>\n",
       "      <th>income_cat</th>\n",
       "      <th>rooms_per_household</th>\n",
       "      <th>population_per_household</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>17606</th>\n",
       "      <td>-121.89</td>\n",
       "      <td>37.29</td>\n",
       "      <td>38</td>\n",
       "      <td>1568</td>\n",
       "      <td>351</td>\n",
       "      <td>710</td>\n",
       "      <td>339</td>\n",
       "      <td>2.7042</td>\n",
       "      <td>&lt;1H OCEAN</td>\n",
       "      <td>2</td>\n",
       "      <td>4.62537</td>\n",
       "      <td>2.0944</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18632</th>\n",
       "      <td>-121.93</td>\n",
       "      <td>37.05</td>\n",
       "      <td>14</td>\n",
       "      <td>679</td>\n",
       "      <td>108</td>\n",
       "      <td>306</td>\n",
       "      <td>113</td>\n",
       "      <td>6.4214</td>\n",
       "      <td>&lt;1H OCEAN</td>\n",
       "      <td>5</td>\n",
       "      <td>6.00885</td>\n",
       "      <td>2.70796</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14650</th>\n",
       "      <td>-117.2</td>\n",
       "      <td>32.77</td>\n",
       "      <td>31</td>\n",
       "      <td>1952</td>\n",
       "      <td>471</td>\n",
       "      <td>936</td>\n",
       "      <td>462</td>\n",
       "      <td>2.8621</td>\n",
       "      <td>NEAR OCEAN</td>\n",
       "      <td>2</td>\n",
       "      <td>4.22511</td>\n",
       "      <td>2.02597</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3230</th>\n",
       "      <td>-119.61</td>\n",
       "      <td>36.31</td>\n",
       "      <td>25</td>\n",
       "      <td>1847</td>\n",
       "      <td>371</td>\n",
       "      <td>1460</td>\n",
       "      <td>353</td>\n",
       "      <td>1.8839</td>\n",
       "      <td>INLAND</td>\n",
       "      <td>2</td>\n",
       "      <td>5.23229</td>\n",
       "      <td>4.13598</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3555</th>\n",
       "      <td>-118.59</td>\n",
       "      <td>34.23</td>\n",
       "      <td>17</td>\n",
       "      <td>6592</td>\n",
       "      <td>1525</td>\n",
       "      <td>4459</td>\n",
       "      <td>1463</td>\n",
       "      <td>3.0347</td>\n",
       "      <td>&lt;1H OCEAN</td>\n",
       "      <td>3</td>\n",
       "      <td>4.50581</td>\n",
       "      <td>3.04785</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      longitude latitude housing_median_age total_rooms total_bedrooms  \\\n",
       "17606   -121.89    37.29                 38        1568            351   \n",
       "18632   -121.93    37.05                 14         679            108   \n",
       "14650    -117.2    32.77                 31        1952            471   \n",
       "3230    -119.61    36.31                 25        1847            371   \n",
       "3555    -118.59    34.23                 17        6592           1525   \n",
       "\n",
       "      population households median_income ocean_proximity income_cat  \\\n",
       "17606        710        339        2.7042       <1H OCEAN          2   \n",
       "18632        306        113        6.4214       <1H OCEAN          5   \n",
       "14650        936        462        2.8621      NEAR OCEAN          2   \n",
       "3230        1460        353        1.8839          INLAND          2   \n",
       "3555        4459       1463        3.0347       <1H OCEAN          3   \n",
       "\n",
       "      rooms_per_household population_per_household  \n",
       "17606             4.62537                   2.0944  \n",
       "18632             6.00885                  2.70796  \n",
       "14650             4.22511                  2.02597  \n",
       "3230              5.23229                  4.13598  \n",
       "3555              4.50581                  3.04785  "
      ]
     },
     "execution_count": 65,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "housing_extra_attribs = pd.DataFrame(\n",
    "    housing_extra_attribs,\n",
    "    columns=list(housing.columns)+[\"rooms_per_household\", \"population_per_household\"],\n",
    "    index=housing.index)\n",
    "housing_extra_attribs.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>longitude</th>\n",
       "      <th>latitude</th>\n",
       "      <th>housing_median_age</th>\n",
       "      <th>total_rooms</th>\n",
       "      <th>total_bedrooms</th>\n",
       "      <th>population</th>\n",
       "      <th>households</th>\n",
       "      <th>median_income</th>\n",
       "      <th>ocean_proximity</th>\n",
       "      <th>income_cat</th>\n",
       "      <th>rooms_per_household</th>\n",
       "      <th>population_per_household</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>12347</th>\n",
       "      <td>-116.54</td>\n",
       "      <td>33.82</td>\n",
       "      <td>12</td>\n",
       "      <td>9482</td>\n",
       "      <td>2501</td>\n",
       "      <td>2725</td>\n",
       "      <td>1300</td>\n",
       "      <td>1.5595</td>\n",
       "      <td>INLAND</td>\n",
       "      <td>2</td>\n",
       "      <td>7.29385</td>\n",
       "      <td>2.09615</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6263</th>\n",
       "      <td>-117.96</td>\n",
       "      <td>34.04</td>\n",
       "      <td>34</td>\n",
       "      <td>1381</td>\n",
       "      <td>265</td>\n",
       "      <td>1020</td>\n",
       "      <td>268</td>\n",
       "      <td>4.025</td>\n",
       "      <td>&lt;1H OCEAN</td>\n",
       "      <td>3</td>\n",
       "      <td>5.15299</td>\n",
       "      <td>3.80597</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12208</th>\n",
       "      <td>-117.1</td>\n",
       "      <td>33.56</td>\n",
       "      <td>6</td>\n",
       "      <td>1868</td>\n",
       "      <td>289</td>\n",
       "      <td>750</td>\n",
       "      <td>247</td>\n",
       "      <td>4.3833</td>\n",
       "      <td>&lt;1H OCEAN</td>\n",
       "      <td>3</td>\n",
       "      <td>7.56275</td>\n",
       "      <td>3.03644</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6396</th>\n",
       "      <td>-118.03</td>\n",
       "      <td>34.14</td>\n",
       "      <td>44</td>\n",
       "      <td>1446</td>\n",
       "      <td>250</td>\n",
       "      <td>721</td>\n",
       "      <td>243</td>\n",
       "      <td>4.7308</td>\n",
       "      <td>INLAND</td>\n",
       "      <td>4</td>\n",
       "      <td>5.95062</td>\n",
       "      <td>2.96708</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12601</th>\n",
       "      <td>-121.48</td>\n",
       "      <td>38.53</td>\n",
       "      <td>37</td>\n",
       "      <td>1704</td>\n",
       "      <td>361</td>\n",
       "      <td>902</td>\n",
       "      <td>356</td>\n",
       "      <td>1.9837</td>\n",
       "      <td>INLAND</td>\n",
       "      <td>2</td>\n",
       "      <td>4.78652</td>\n",
       "      <td>2.53371</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13354</th>\n",
       "      <td>-117.61</td>\n",
       "      <td>34.02</td>\n",
       "      <td>15</td>\n",
       "      <td>1791</td>\n",
       "      <td>346</td>\n",
       "      <td>1219</td>\n",
       "      <td>328</td>\n",
       "      <td>3.8125</td>\n",
       "      <td>INLAND</td>\n",
       "      <td>3</td>\n",
       "      <td>5.46037</td>\n",
       "      <td>3.71646</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5749</th>\n",
       "      <td>-118.27</td>\n",
       "      <td>34.16</td>\n",
       "      <td>45</td>\n",
       "      <td>1865</td>\n",
       "      <td>360</td>\n",
       "      <td>973</td>\n",
       "      <td>349</td>\n",
       "      <td>3.6587</td>\n",
       "      <td>&lt;1H OCEAN</td>\n",
       "      <td>3</td>\n",
       "      <td>5.34384</td>\n",
       "      <td>2.78797</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18799</th>\n",
       "      <td>-121.89</td>\n",
       "      <td>40.97</td>\n",
       "      <td>26</td>\n",
       "      <td>1183</td>\n",
       "      <td>276</td>\n",
       "      <td>513</td>\n",
       "      <td>206</td>\n",
       "      <td>2.225</td>\n",
       "      <td>INLAND</td>\n",
       "      <td>2</td>\n",
       "      <td>5.74272</td>\n",
       "      <td>2.49029</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15022</th>\n",
       "      <td>-117</td>\n",
       "      <td>32.77</td>\n",
       "      <td>30</td>\n",
       "      <td>1802</td>\n",
       "      <td>401</td>\n",
       "      <td>776</td>\n",
       "      <td>386</td>\n",
       "      <td>2.8125</td>\n",
       "      <td>&lt;1H OCEAN</td>\n",
       "      <td>2</td>\n",
       "      <td>4.66839</td>\n",
       "      <td>2.01036</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16834</th>\n",
       "      <td>-122.55</td>\n",
       "      <td>37.59</td>\n",
       "      <td>31</td>\n",
       "      <td>1331</td>\n",
       "      <td>245</td>\n",
       "      <td>598</td>\n",
       "      <td>225</td>\n",
       "      <td>4.1827</td>\n",
       "      <td>NEAR OCEAN</td>\n",
       "      <td>3</td>\n",
       "      <td>5.91556</td>\n",
       "      <td>2.65778</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1468</th>\n",
       "      <td>-121.99</td>\n",
       "      <td>37.96</td>\n",
       "      <td>17</td>\n",
       "      <td>2756</td>\n",
       "      <td>423</td>\n",
       "      <td>1228</td>\n",
       "      <td>426</td>\n",
       "      <td>5.5872</td>\n",
       "      <td>INLAND</td>\n",
       "      <td>4</td>\n",
       "      <td>6.46948</td>\n",
       "      <td>2.88263</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14906</th>\n",
       "      <td>-117.06</td>\n",
       "      <td>32.6</td>\n",
       "      <td>33</td>\n",
       "      <td>905</td>\n",
       "      <td>205</td>\n",
       "      <td>989</td>\n",
       "      <td>222</td>\n",
       "      <td>2.7014</td>\n",
       "      <td>NEAR OCEAN</td>\n",
       "      <td>2</td>\n",
       "      <td>4.07658</td>\n",
       "      <td>4.45495</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10779</th>\n",
       "      <td>-117.91</td>\n",
       "      <td>33.65</td>\n",
       "      <td>17</td>\n",
       "      <td>1328</td>\n",
       "      <td>377</td>\n",
       "      <td>762</td>\n",
       "      <td>344</td>\n",
       "      <td>2.2222</td>\n",
       "      <td>&lt;1H OCEAN</td>\n",
       "      <td>2</td>\n",
       "      <td>3.86047</td>\n",
       "      <td>2.21512</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7934</th>\n",
       "      <td>-118.08</td>\n",
       "      <td>33.82</td>\n",
       "      <td>26</td>\n",
       "      <td>4259</td>\n",
       "      <td>588</td>\n",
       "      <td>1644</td>\n",
       "      <td>581</td>\n",
       "      <td>6.2519</td>\n",
       "      <td>&lt;1H OCEAN</td>\n",
       "      <td>5</td>\n",
       "      <td>7.33046</td>\n",
       "      <td>2.8296</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9745</th>\n",
       "      <td>-121.7</td>\n",
       "      <td>36.67</td>\n",
       "      <td>37</td>\n",
       "      <td>641</td>\n",
       "      <td>129</td>\n",
       "      <td>458</td>\n",
       "      <td>142</td>\n",
       "      <td>3.3456</td>\n",
       "      <td>&lt;1H OCEAN</td>\n",
       "      <td>3</td>\n",
       "      <td>4.51408</td>\n",
       "      <td>3.22535</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18768</th>\n",
       "      <td>-122.24</td>\n",
       "      <td>40.51</td>\n",
       "      <td>23</td>\n",
       "      <td>2216</td>\n",
       "      <td>378</td>\n",
       "      <td>1006</td>\n",
       "      <td>338</td>\n",
       "      <td>4.559</td>\n",
       "      <td>INLAND</td>\n",
       "      <td>4</td>\n",
       "      <td>6.55621</td>\n",
       "      <td>2.97633</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5564</th>\n",
       "      <td>-118.29</td>\n",
       "      <td>33.91</td>\n",
       "      <td>41</td>\n",
       "      <td>2475</td>\n",
       "      <td>532</td>\n",
       "      <td>1416</td>\n",
       "      <td>470</td>\n",
       "      <td>3.8372</td>\n",
       "      <td>&lt;1H OCEAN</td>\n",
       "      <td>3</td>\n",
       "      <td>5.26596</td>\n",
       "      <td>3.01277</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7064</th>\n",
       "      <td>-118.03</td>\n",
       "      <td>33.94</td>\n",
       "      <td>30</td>\n",
       "      <td>2572</td>\n",
       "      <td>521</td>\n",
       "      <td>1564</td>\n",
       "      <td>501</td>\n",
       "      <td>3.4861</td>\n",
       "      <td>&lt;1H OCEAN</td>\n",
       "      <td>3</td>\n",
       "      <td>5.13373</td>\n",
       "      <td>3.12176</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13637</th>\n",
       "      <td>-117.32</td>\n",
       "      <td>34.08</td>\n",
       "      <td>41</td>\n",
       "      <td>1359</td>\n",
       "      <td>264</td>\n",
       "      <td>786</td>\n",
       "      <td>244</td>\n",
       "      <td>2.5208</td>\n",
       "      <td>INLAND</td>\n",
       "      <td>2</td>\n",
       "      <td>5.56967</td>\n",
       "      <td>3.22131</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4827</th>\n",
       "      <td>-118.32</td>\n",
       "      <td>34.03</td>\n",
       "      <td>31</td>\n",
       "      <td>2206</td>\n",
       "      <td>501</td>\n",
       "      <td>1194</td>\n",
       "      <td>435</td>\n",
       "      <td>1.9531</td>\n",
       "      <td>&lt;1H OCEAN</td>\n",
       "      <td>2</td>\n",
       "      <td>5.07126</td>\n",
       "      <td>2.74483</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      longitude latitude housing_median_age total_rooms total_bedrooms  \\\n",
       "12347   -116.54    33.82                 12        9482           2501   \n",
       "6263    -117.96    34.04                 34        1381            265   \n",
       "12208    -117.1    33.56                  6        1868            289   \n",
       "6396    -118.03    34.14                 44        1446            250   \n",
       "12601   -121.48    38.53                 37        1704            361   \n",
       "13354   -117.61    34.02                 15        1791            346   \n",
       "5749    -118.27    34.16                 45        1865            360   \n",
       "18799   -121.89    40.97                 26        1183            276   \n",
       "15022      -117    32.77                 30        1802            401   \n",
       "16834   -122.55    37.59                 31        1331            245   \n",
       "1468    -121.99    37.96                 17        2756            423   \n",
       "14906   -117.06     32.6                 33         905            205   \n",
       "10779   -117.91    33.65                 17        1328            377   \n",
       "7934    -118.08    33.82                 26        4259            588   \n",
       "9745     -121.7    36.67                 37         641            129   \n",
       "18768   -122.24    40.51                 23        2216            378   \n",
       "5564    -118.29    33.91                 41        2475            532   \n",
       "7064    -118.03    33.94                 30        2572            521   \n",
       "13637   -117.32    34.08                 41        1359            264   \n",
       "4827    -118.32    34.03                 31        2206            501   \n",
       "\n",
       "      population households median_income ocean_proximity income_cat  \\\n",
       "12347       2725       1300        1.5595          INLAND          2   \n",
       "6263        1020        268         4.025       <1H OCEAN          3   \n",
       "12208        750        247        4.3833       <1H OCEAN          3   \n",
       "6396         721        243        4.7308          INLAND          4   \n",
       "12601        902        356        1.9837          INLAND          2   \n",
       "13354       1219        328        3.8125          INLAND          3   \n",
       "5749         973        349        3.6587       <1H OCEAN          3   \n",
       "18799        513        206         2.225          INLAND          2   \n",
       "15022        776        386        2.8125       <1H OCEAN          2   \n",
       "16834        598        225        4.1827      NEAR OCEAN          3   \n",
       "1468        1228        426        5.5872          INLAND          4   \n",
       "14906        989        222        2.7014      NEAR OCEAN          2   \n",
       "10779        762        344        2.2222       <1H OCEAN          2   \n",
       "7934        1644        581        6.2519       <1H OCEAN          5   \n",
       "9745         458        142        3.3456       <1H OCEAN          3   \n",
       "18768       1006        338         4.559          INLAND          4   \n",
       "5564        1416        470        3.8372       <1H OCEAN          3   \n",
       "7064        1564        501        3.4861       <1H OCEAN          3   \n",
       "13637        786        244        2.5208          INLAND          2   \n",
       "4827        1194        435        1.9531       <1H OCEAN          2   \n",
       "\n",
       "      rooms_per_household population_per_household  \n",
       "12347             7.29385                  2.09615  \n",
       "6263              5.15299                  3.80597  \n",
       "12208             7.56275                  3.03644  \n",
       "6396              5.95062                  2.96708  \n",
       "12601             4.78652                  2.53371  \n",
       "13354             5.46037                  3.71646  \n",
       "5749              5.34384                  2.78797  \n",
       "18799             5.74272                  2.49029  \n",
       "15022             4.66839                  2.01036  \n",
       "16834             5.91556                  2.65778  \n",
       "1468              6.46948                  2.88263  \n",
       "14906             4.07658                  4.45495  \n",
       "10779             3.86047                  2.21512  \n",
       "7934              7.33046                   2.8296  \n",
       "9745              4.51408                  3.22535  \n",
       "18768             6.55621                  2.97633  \n",
       "5564              5.26596                  3.01277  \n",
       "7064              5.13373                  3.12176  \n",
       "13637             5.56967                  3.22131  \n",
       "4827              5.07126                  2.74483  "
      ]
     },
     "execution_count": 66,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "housing_extra_attribs.sample(20)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "特征缩放\n",
    "转换流水线"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.pipeline import Pipeline\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "\n",
    "num_pipeline = Pipeline([\n",
    "        ('imputer', SimpleImputer(strategy=\"median\")),\n",
    "        ('attribs_adder', CombinedAttributesAdder()),\n",
    "        ('std_scaler', StandardScaler())\n",
    "    ])\n",
    "\n",
    "housing_num_tr = num_pipeline.fit_transform(housing_num)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Int64Index: 16512 entries, 17606 to 15775\n",
      "Data columns (total 9 columns):\n",
      " #   Column              Non-Null Count  Dtype   \n",
      "---  ------              --------------  -----   \n",
      " 0   longitude           16512 non-null  float64 \n",
      " 1   latitude            16512 non-null  float64 \n",
      " 2   housing_median_age  16512 non-null  float64 \n",
      " 3   total_rooms         16512 non-null  float64 \n",
      " 4   total_bedrooms      16354 non-null  float64 \n",
      " 5   population          16512 non-null  float64 \n",
      " 6   households          16512 non-null  float64 \n",
      " 7   median_income       16512 non-null  float64 \n",
      " 8   income_cat          16512 non-null  category\n",
      "dtypes: category(1), float64(8)\n",
      "memory usage: 1.1 MB\n"
     ]
    }
   ],
   "source": [
    "housing_num.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {},
   "outputs": [],
   "source": [
    "# dataFrame -> series -> ndarray\n",
    "class DataFrameSelector(BaseEstimator, TransformerMixin):\n",
    "    def __init__(self, attribute_names):\n",
    "        self.attribute_names = attribute_names\n",
    "    def fit(self, X, y=None):\n",
    "        return self\n",
    "    def transform(self, X):\n",
    "        return X[self.attribute_names].values"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['longitude',\n",
       " 'latitude',\n",
       " 'housing_median_age',\n",
       " 'total_rooms',\n",
       " 'total_bedrooms',\n",
       " 'population',\n",
       " 'households',\n",
       " 'median_income',\n",
       " 'income_cat']"
      ]
     },
     "execution_count": 70,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "num_attribs =list(housing_num) \n",
    "num_attribs"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "metadata": {},
   "outputs": [],
   "source": [
    "num_pipeline = Pipeline([\n",
    "        ('selector', DataFrameSelector(num_attribs)),\n",
    "        ('imputer', SimpleImputer(strategy=\"median\")),\n",
    "        ('attribs_adder', CombinedAttributesAdder()),\n",
    "        ('std_scaler', StandardScaler()),\n",
    "    ])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.base import TransformerMixin \n",
    "class MyLabelBinarizer(TransformerMixin):\n",
    "    def __init__(self, *args, **kwargs):\n",
    "        self.encoder = LabelBinarizer(*args, **kwargs)\n",
    "    def fit(self, x, y=0):\n",
    "        self.encoder.fit(x)\n",
    "        return self\n",
    "    def transform(self, x, y=0):\n",
    "        return self.encoder.transform(x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {},
   "outputs": [],
   "source": [
    "cat_attribs = ['ocean_proximity']\n",
    "from sklearn.preprocessing import LabelBinarizer\n",
    "\n",
    "cat_pipeline = Pipeline([\n",
    "        ('selector', DataFrameSelector(cat_attribs)),               \n",
    "        ('LabelBinarizer', MyLabelBinarizer()),\n",
    "    ])\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.pipeline import FeatureUnion\n",
    "\n",
    "full_pipeline = FeatureUnion(transformer_list=[\n",
    "        (\"num_pipline\", num_pipeline,),\n",
    "        ('cat_pipline', cat_pipeline),\n",
    "    ])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[-1.15604281,  0.77194962,  0.74333089, ...,  0.        ,\n",
       "         0.        ,  0.        ],\n",
       "       [-1.17602483,  0.6596948 , -1.1653172 , ...,  0.        ,\n",
       "         0.        ,  0.        ],\n",
       "       [ 1.18684903, -1.34218285,  0.18664186, ...,  0.        ,\n",
       "         0.        ,  1.        ],\n",
       "       ...,\n",
       "       [ 1.58648943, -0.72478134, -1.56295222, ...,  0.        ,\n",
       "         0.        ,  0.        ],\n",
       "       [ 0.78221312, -0.85106801,  0.18664186, ...,  0.        ,\n",
       "         0.        ,  0.        ],\n",
       "       [-1.43579109,  0.99645926,  1.85670895, ...,  0.        ,\n",
       "         1.        ,  0.        ]])"
      ]
     },
     "execution_count": 75,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "housing_finished = full_pipeline.fit_transform(housing)\n",
    "housing_finished"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "      <th>4</th>\n",
       "      <th>5</th>\n",
       "      <th>6</th>\n",
       "      <th>7</th>\n",
       "      <th>8</th>\n",
       "      <th>9</th>\n",
       "      <th>10</th>\n",
       "      <th>11</th>\n",
       "      <th>12</th>\n",
       "      <th>13</th>\n",
       "      <th>14</th>\n",
       "      <th>15</th>\n",
       "      <th>16</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>-1.156043</td>\n",
       "      <td>0.771950</td>\n",
       "      <td>0.743331</td>\n",
       "      <td>-0.493234</td>\n",
       "      <td>-0.445438</td>\n",
       "      <td>-0.636211</td>\n",
       "      <td>-0.420698</td>\n",
       "      <td>-0.614937</td>\n",
       "      <td>-0.954456</td>\n",
       "      <td>-0.312055</td>\n",
       "      <td>-0.086499</td>\n",
       "      <td>0.155318</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>-1.176025</td>\n",
       "      <td>0.659695</td>\n",
       "      <td>-1.165317</td>\n",
       "      <td>-0.908967</td>\n",
       "      <td>-1.036928</td>\n",
       "      <td>-0.998331</td>\n",
       "      <td>-1.022227</td>\n",
       "      <td>1.336459</td>\n",
       "      <td>1.890305</td>\n",
       "      <td>0.217683</td>\n",
       "      <td>-0.033534</td>\n",
       "      <td>-0.836289</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.186849</td>\n",
       "      <td>-1.342183</td>\n",
       "      <td>0.186642</td>\n",
       "      <td>-0.313660</td>\n",
       "      <td>-0.153345</td>\n",
       "      <td>-0.433639</td>\n",
       "      <td>-0.093318</td>\n",
       "      <td>-0.532046</td>\n",
       "      <td>-0.954456</td>\n",
       "      <td>-0.465315</td>\n",
       "      <td>-0.092405</td>\n",
       "      <td>0.422200</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>-0.017068</td>\n",
       "      <td>0.313576</td>\n",
       "      <td>-0.290520</td>\n",
       "      <td>-0.362762</td>\n",
       "      <td>-0.396756</td>\n",
       "      <td>0.036041</td>\n",
       "      <td>-0.383436</td>\n",
       "      <td>-1.045566</td>\n",
       "      <td>-0.954456</td>\n",
       "      <td>-0.079661</td>\n",
       "      <td>0.089736</td>\n",
       "      <td>-0.196453</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.492474</td>\n",
       "      <td>-0.659299</td>\n",
       "      <td>-0.926736</td>\n",
       "      <td>1.856193</td>\n",
       "      <td>2.412211</td>\n",
       "      <td>2.724154</td>\n",
       "      <td>2.570975</td>\n",
       "      <td>-0.441437</td>\n",
       "      <td>-0.006202</td>\n",
       "      <td>-0.357834</td>\n",
       "      <td>-0.004194</td>\n",
       "      <td>0.269928</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          0         1         2         3         4         5         6  \\\n",
       "0 -1.156043  0.771950  0.743331 -0.493234 -0.445438 -0.636211 -0.420698   \n",
       "1 -1.176025  0.659695 -1.165317 -0.908967 -1.036928 -0.998331 -1.022227   \n",
       "2  1.186849 -1.342183  0.186642 -0.313660 -0.153345 -0.433639 -0.093318   \n",
       "3 -0.017068  0.313576 -0.290520 -0.362762 -0.396756  0.036041 -0.383436   \n",
       "4  0.492474 -0.659299 -0.926736  1.856193  2.412211  2.724154  2.570975   \n",
       "\n",
       "          7         8         9        10        11   12   13   14   15   16  \n",
       "0 -0.614937 -0.954456 -0.312055 -0.086499  0.155318  1.0  0.0  0.0  0.0  0.0  \n",
       "1  1.336459  1.890305  0.217683 -0.033534 -0.836289  1.0  0.0  0.0  0.0  0.0  \n",
       "2 -0.532046 -0.954456 -0.465315 -0.092405  0.422200  0.0  0.0  0.0  0.0  1.0  \n",
       "3 -1.045566 -0.954456 -0.079661  0.089736 -0.196453  0.0  1.0  0.0  0.0  0.0  \n",
       "4 -0.441437 -0.006202 -0.357834 -0.004194  0.269928  1.0  0.0  0.0  0.0  0.0  "
      ]
     },
     "execution_count": 76,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "housing_prepared = pd.DataFrame(housing_finished)\n",
    "housing_prepared.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "metadata": {},
   "outputs": [],
   "source": [
    "#选择和训练模型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "17606    286600.0\n",
       "18632    340600.0\n",
       "14650    196900.0\n",
       "3230      46300.0\n",
       "3555     254500.0\n",
       "           ...   \n",
       "6563     240200.0\n",
       "12053    113000.0\n",
       "13908     97800.0\n",
       "11159    225900.0\n",
       "15775    500001.0\n",
       "Name: median_house_value, Length: 16512, dtype: float64"
      ]
     },
     "execution_count": 78,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame(housing_prepared)\n",
    "df.head()\n",
    "housing_labels"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "metadata": {},
   "outputs": [],
   "source": [
    "#训练模型和评估训练集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False)"
      ]
     },
     "execution_count": 80,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.linear_model import LinearRegression\n",
    "lin_reg = LinearRegression()\n",
    "lin_reg.fit(housing_prepared,housing_labels)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "预测值: [203682.37379543 326371.39370781 204218.64588245  58685.4770482\n",
      " 194213.06443039]\n"
     ]
    }
   ],
   "source": [
    "# 预测数据\n",
    "some_data = housing.iloc[:5]\n",
    "some_labels = housing_labels.iloc[:5]\n",
    "\n",
    "some_data_prepared = full_pipeline.transform(some_data)\n",
    "\n",
    "print(\"预测值:\", lin_reg.predict(some_data_prepared))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 82,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "68376.64295459937"
      ]
     },
     "execution_count": 82,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.metrics import mean_squared_error\n",
    "\n",
    "housing_predictions = lin_reg.predict(housing_prepared)\n",
    "lin_mse = mean_squared_error(housing_labels, housing_predictions)\n",
    "lin_mse\n",
    "lin_rmse = np.sqrt(lin_mse)\n",
    "lin_rmse\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 83,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "DecisionTreeRegressor(criterion='mse', max_depth=None, max_features=None,\n",
       "           max_leaf_nodes=None, min_impurity_decrease=0.0,\n",
       "           min_impurity_split=None, min_samples_leaf=1,\n",
       "           min_samples_split=2, min_weight_fraction_leaf=0.0,\n",
       "           presort=False, random_state=42, splitter='best')"
      ]
     },
     "execution_count": 83,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 决策树\n",
    "from sklearn.tree import DecisionTreeRegressor\n",
    "\n",
    "tree_reg = DecisionTreeRegressor(random_state=42)\n",
    "tree_reg.fit(housing_prepared, housing_labels)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 84,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.0"
      ]
     },
     "execution_count": 84,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "housing_predictions = tree_reg.predict(housing_prepared)\n",
    "tree_mse = mean_squared_error(housing_labels, housing_predictions)\n",
    "tree_rmse = np.sqrt(tree_mse)\n",
    "tree_rmse"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 85,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 过拟合"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "使用交叉验证进行更好的评估"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 86,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([70307.54079165, 67270.94561829, 71361.89886493, 68889.91784739,\n",
       "       70992.94150631, 74140.66907294, 70607.72083897, 70576.13836762,\n",
       "       76433.16342183, 70270.96266671])"
      ]
     },
     "execution_count": 86,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 使用train_test_split函数将训练集分为较小的训练集和验证集，然后根据这些较小的训练集来训练模型，并对其进行评估\n",
    "# sklearn的交叉验证，将训练集随机分割成10个不同的子集，每个子集称为一个折叠，对模型进行10次训练和评估，每次挑选1个折叠进行评估，另外9个进行训练\n",
    "from sklearn.model_selection import cross_val_score\n",
    "# neg_mean_squared_error‘ 也就是 均方差回归损失 该统计参数是预测数据和原始数据对应点误差的平方和的均值\n",
    "\n",
    "# 决策树交叉验证\n",
    "scores = cross_val_score(tree_reg, housing_prepared, housing_labels,\n",
    "                         scoring=\"neg_mean_squared_error\", cv=10)\n",
    "tree_rmse_scores = np.sqrt(-scores)\n",
    "tree_rmse_scores"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 87,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Scores: [70307.54079165 67270.94561829 71361.89886493 68889.91784739\n",
      " 70992.94150631 74140.66907294 70607.72083897 70576.13836762\n",
      " 76433.16342183 70270.96266671]\n",
      "Mean: 71085.189899664\n",
      "Standard deviation: 2431.961029690467\n"
     ]
    }
   ],
   "source": [
    "def display_scores(scores):\n",
    "    print(\"Scores:\", scores)\n",
    "    print(\"Mean:\", scores.mean())\n",
    "    print(\"Standard deviation:\", scores.std())\n",
    "\n",
    "display_scores(tree_rmse_scores)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 88,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Scores: [66877.52325028 66608.120256   70575.91118868 74179.94799352\n",
      " 67683.32205678 71103.16843468 64782.65896552 67711.29940352\n",
      " 71080.40484136 67687.6384546 ]\n",
      "Mean: 68828.99948449328\n",
      "Standard deviation: 2662.76157061034\n"
     ]
    }
   ],
   "source": [
    "# 线性 交叉验证\n",
    "lin_scores = cross_val_score(lin_reg, housing_prepared, housing_labels,\n",
    "                             scoring=\"neg_mean_squared_error\", cv=10)\n",
    "lin_rmse_scores = np.sqrt(-lin_scores)\n",
    "display_scores(lin_rmse_scores)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 89,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/sklearn/ensemble/weight_boosting.py:29: DeprecationWarning: numpy.core.umath_tests is an internal NumPy module and should not be imported. It will be removed in a future NumPy release.\n",
      "  from numpy.core.umath_tests import inner1d\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "RandomForestRegressor(bootstrap=True, criterion='mse', max_depth=None,\n",
       "           max_features='auto', max_leaf_nodes=None,\n",
       "           min_impurity_decrease=0.0, min_impurity_split=None,\n",
       "           min_samples_leaf=1, min_samples_split=2,\n",
       "           min_weight_fraction_leaf=0.0, n_estimators=10, n_jobs=1,\n",
       "           oob_score=False, random_state=42, verbose=0, warm_start=False)"
      ]
     },
     "execution_count": 89,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.ensemble import RandomForestRegressor\n",
    "\n",
    "forest_reg = RandomForestRegressor(n_estimators=10, random_state=42)\n",
    "forest_reg.fit(housing_prepared, housing_labels)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 90,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "22112.540875989125"
      ]
     },
     "execution_count": 90,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "housing_predictions = forest_reg.predict(housing_prepared)\n",
    "forest_mse = mean_squared_error(housing_labels, housing_predictions)\n",
    "forest_rmse = np.sqrt(forest_mse)\n",
    "forest_rmse"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 91,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "GridSearchCV(cv=5, error_score='raise',\n",
       "       estimator=RandomForestRegressor(bootstrap=True, criterion='mse', max_depth=None,\n",
       "           max_features='auto', max_leaf_nodes=None,\n",
       "           min_impurity_decrease=0.0, min_impurity_split=None,\n",
       "           min_samples_leaf=1, min_samples_split=2,\n",
       "           min_weight_fraction_leaf=0.0, n_estimators=10, n_jobs=1,\n",
       "           oob_score=False, random_state=42, verbose=0, warm_start=False),\n",
       "       fit_params=None, iid=True, n_jobs=1,\n",
       "       param_grid=[{'n_estimators': [3, 10, 30], 'max_features': [2, 4, 6, 8]}, {'bootstrap': [False], 'n_estimators': [3, 10], 'max_features': [2, 3, 4]}],\n",
       "       pre_dispatch='2*n_jobs', refit=True, return_train_score=True,\n",
       "       scoring='neg_mean_squared_error', verbose=0)"
      ]
     },
     "execution_count": 91,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.model_selection import GridSearchCV\n",
    "\n",
    "param_grid = [\n",
    "    {'n_estimators': [3, 10, 30], 'max_features': [2, 4, 6, 8]},\n",
    "    {'bootstrap': [False], 'n_estimators': [3, 10], 'max_features': [2, 3, 4]},\n",
    "  ]\n",
    "\n",
    "forest_reg = RandomForestRegressor(random_state=42)\n",
    "grid_search = GridSearchCV(forest_reg, param_grid, cv=5,\n",
    "                           scoring='neg_mean_squared_error', return_train_score=True)\n",
    "grid_search.fit(housing_prepared, housing_labels)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 92,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'max_features': 6, 'n_estimators': 30}"
      ]
     },
     "execution_count": 92,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "grid_search.best_params_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 93,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "RandomForestRegressor(bootstrap=True, criterion='mse', max_depth=None,\n",
       "           max_features=6, max_leaf_nodes=None, min_impurity_decrease=0.0,\n",
       "           min_impurity_split=None, min_samples_leaf=1,\n",
       "           min_samples_split=2, min_weight_fraction_leaf=0.0,\n",
       "           n_estimators=30, n_jobs=1, oob_score=False, random_state=42,\n",
       "           verbose=0, warm_start=False)"
      ]
     },
     "execution_count": 93,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "grid_search.best_estimator_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 94,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "64265.85210091941 {'max_features': 2, 'n_estimators': 3}\n",
      "55882.984840186626 {'max_features': 2, 'n_estimators': 10}\n",
      "53472.52977048399 {'max_features': 2, 'n_estimators': 30}\n",
      "61320.61721024631 {'max_features': 4, 'n_estimators': 3}\n",
      "53834.66617027598 {'max_features': 4, 'n_estimators': 10}\n",
      "51273.25987325864 {'max_features': 4, 'n_estimators': 30}\n",
      "59851.160077252265 {'max_features': 6, 'n_estimators': 3}\n",
      "53108.49267924178 {'max_features': 6, 'n_estimators': 10}\n",
      "50804.490677496164 {'max_features': 6, 'n_estimators': 30}\n",
      "59225.21977850634 {'max_features': 8, 'n_estimators': 3}\n",
      "52883.78258097852 {'max_features': 8, 'n_estimators': 10}\n",
      "50942.15913785863 {'max_features': 8, 'n_estimators': 30}\n",
      "62801.35724701795 {'bootstrap': False, 'max_features': 2, 'n_estimators': 3}\n",
      "54452.705621479254 {'bootstrap': False, 'max_features': 2, 'n_estimators': 10}\n",
      "61122.949491813 {'bootstrap': False, 'max_features': 3, 'n_estimators': 3}\n",
      "53014.33296453683 {'bootstrap': False, 'max_features': 3, 'n_estimators': 10}\n",
      "60252.65376680052 {'bootstrap': False, 'max_features': 4, 'n_estimators': 3}\n",
      "52716.55059637336 {'bootstrap': False, 'max_features': 4, 'n_estimators': 10}\n"
     ]
    }
   ],
   "source": [
    "cvres = grid_search.cv_results_\n",
    "for mean_score, params in zip(cvres[\"mean_test_score\"], cvres[\"params\"]):\n",
    "    print(np.sqrt(-mean_score), params)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 95,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 随即搜索"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 96,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "RandomizedSearchCV(cv=5, error_score='raise',\n",
       "          estimator=RandomForestRegressor(bootstrap=True, criterion='mse', max_depth=None,\n",
       "           max_features='auto', max_leaf_nodes=None,\n",
       "           min_impurity_decrease=0.0, min_impurity_split=None,\n",
       "           min_samples_leaf=1, min_samples_split=2,\n",
       "           min_weight_fraction_leaf=0.0, n_estimators=10, n_jobs=1,\n",
       "           oob_score=False, random_state=42, verbose=0, warm_start=False),\n",
       "          fit_params=None, iid=True, n_iter=10, n_jobs=1,\n",
       "          param_distributions={'n_estimators': <scipy.stats._distn_infrastructure.rv_frozen object at 0x1295f2780>, 'max_features': <scipy.stats._distn_infrastructure.rv_frozen object at 0x1295f2470>},\n",
       "          pre_dispatch='2*n_jobs', random_state=42, refit=True,\n",
       "          return_train_score='warn', scoring='neg_mean_squared_error',\n",
       "          verbose=0)"
      ]
     },
     "execution_count": 96,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.model_selection import RandomizedSearchCV\n",
    "from scipy.stats import randint\n",
    "\n",
    "param_distribs = {\n",
    "        'n_estimators': randint(low=1, high=200),\n",
    "        'max_features': randint(low=0, high=5),\n",
    "    }\n",
    "\n",
    "forest_reg = RandomForestRegressor(random_state=42)\n",
    "rnd_search = RandomizedSearchCV(forest_reg, param_distributions=param_distribs,\n",
    "                                n_iter=10, cv=5, scoring='neg_mean_squared_error', random_state=42)\n",
    "rnd_search.fit(housing_prepared, housing_labels)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "cvres = rnd_search.cv_results_\n",
    "for mean_score, params in zip(cvres[\"mean_test_score\"], cvres[\"params\"]):\n",
    "    print(np.sqrt(-mean_score), params)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 101,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([6.79326113e-02, 6.18280724e-02, 4.33395023e-02, 1.81017027e-02,\n",
       "       1.83291556e-02, 1.93269892e-02, 1.78369580e-02, 2.41360490e-01,\n",
       "       1.61976585e-01, 5.35982558e-02, 1.06273526e-01, 6.14045141e-02,\n",
       "       1.22353255e-02, 1.08821239e-01, 2.76143239e-05, 2.59938294e-03,\n",
       "       5.00807682e-03])"
      ]
     },
     "execution_count": 101,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "feature_importances = grid_search.best_estimator_.feature_importances_\n",
    "feature_importances"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 102,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[(0.24136048955382886, 'median_income'),\n",
       " (0.16197658459849276, 'income_cat'),\n",
       " (0.10882123891274476, 'INLAND'),\n",
       " (0.10627352591969835, 'population_per_household'),\n",
       " (0.06793261134305183, 'longitude'),\n",
       " (0.06182807241916786, 'latitude'),\n",
       " (0.061404514078416045, 'bedrooms_per_room'),\n",
       " (0.05359825584988402, 'rooms_per_household'),\n",
       " (0.04333950231438806, 'housing_median_age'),\n",
       " (0.019326989179411204, 'population'),\n",
       " (0.018329155582427956, 'total_bedrooms'),\n",
       " (0.01810170268968371, 'total_rooms'),\n",
       " (0.01783695799011688, 'households'),\n",
       " (0.012235325483341324, '<1H OCEAN'),\n",
       " (0.0050080768169210735, 'NEAR OCEAN'),\n",
       " (0.002599382944523225, 'NEAR BAY'),\n",
       " (2.7614323902184926e-05, 'ISLAND')]"
      ]
     },
     "execution_count": 102,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# num_attribs\n",
    "extra_attribs = [\"rooms_per_household\", \"population_per_household\", \"bedrooms_per_room\"]\n",
    "cat_one_hot_attribs = list(encoder.classes_)\n",
    "attributes = num_attribs + extra_attribs + cat_one_hot_attribs\n",
    "sorted(zip(feature_importances, attributes), reverse = True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 103,
   "metadata": {},
   "outputs": [
    {
     "ename": "NameError",
     "evalue": "name 'strat_test_set' is not defined",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mNameError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-103-89d578ff48b4>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m      1\u001b[0m \u001b[0mfinal_model\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgrid_search\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbest_estimator_\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      2\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0mX_test\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mstrat_test_set\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdrop\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'median_house_value'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      4\u001b[0m \u001b[0my_test\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mstrat_test_set\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'median_house_value'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcopy\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      5\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mNameError\u001b[0m: name 'strat_test_set' is not defined"
     ]
    }
   ],
   "source": [
    "final_model = grid_search.best_estimator_\n",
    "\n",
    "X_test = strat_test_set.drop('median_house_value', axis = 1)\n",
    "y_test = strat_test_set['median_house_value'].copy()\n",
    "\n",
    "X_test_prepared = full_pipeline.transform(X_test)\n",
    "# X_test_prepared\n",
    "\n",
    "# df = pd.DataFrame(X_test_prepared)\n",
    "# df.head()\n",
    "\n",
    "final_predictions = final_model.predict(X_test_prepared)\n",
    "\n",
    "final_mse = mean_squared_error(y_test, final_predictions)\n",
    "final_rmse = np.sqrt(final_mse)\n",
    "final_rmse"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "第二题"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 97,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[1 7 6 0 3 2 5 4]\n",
      "[2. 0. 1. 3. 4. 5. 6. 7.]\n",
      "[2. 0. 1. 3.]\n"
     ]
    }
   ],
   "source": [
    "dists= np.array([ 3.0, 2.0, 5.0, 4.0, 7.0, 6.0, 1.0, 0.0])\n",
    "\n",
    "k = 5\n",
    "print(np.argpartition(dists, k))\n",
    "\n",
    "print(dists[np.argpartition(dists, k)])\n",
    "\n",
    "# 取X个比k名次还高的\n",
    "X = 4\n",
    "print(dists[np.argpartition(dists, k)[:X]])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 104,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[['2.7614323902184926e-05' 'ISLAND']\n",
      " ['0.002599382944523225' 'NEAR BAY']\n",
      " ['0.0050080768169210735' 'NEAR OCEAN']\n",
      " ['0.012235325483341324' '<1H OCEAN']\n",
      " ['0.01783695799011688' 'households']\n",
      " ['0.01810170268968371' 'total_rooms']\n",
      " ['0.018329155582427956' 'total_bedrooms']\n",
      " ['0.019326989179411204' 'population']\n",
      " ['0.04333950231438806' 'housing_median_age']\n",
      " ['0.05359825584988402' 'rooms_per_household']\n",
      " ['0.061404514078416045' 'bedrooms_per_room']\n",
      " ['0.06182807241916786' 'latitude']\n",
      " ['0.06793261134305183' 'longitude']\n",
      " ['0.10627352591969835' 'population_per_household']\n",
      " ['0.10882123891274476' 'INLAND']\n",
      " ['0.16197658459849276' 'income_cat']\n",
      " ['0.24136048955382886' 'median_income']]\n"
     ]
    }
   ],
   "source": [
    "ba =sorted(zip(feature_importances, attributes))\n",
    "print(np.array(ba))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 105,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.base import BaseEstimator, TransformerMixin\n",
    "\n",
    "def indices_of_top_k(arr, k):\n",
    "    return np.sort(np.argpartition(np.array(arr), -k)[-k:])\n",
    "\n",
    "class TopFeatureSelector(BaseEstimator, TransformerMixin):\n",
    "    def __init__(self, feature_importances, k):\n",
    "        self.feature_importances = feature_importances\n",
    "        self.k = k\n",
    "    def fit(self, X, y = None):\n",
    "        self.feature_indices_ = indices_of_top_k(self.feature_importances, self.k)\n",
    "        return self\n",
    "    def transform(self, X):\n",
    "        return X[:, self.feature_indices_]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 106,
   "metadata": {},
   "outputs": [
    {
     "ename": "NameError",
     "evalue": "name 'feature_importancesr' is not defined",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mNameError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-106-44d4d68275df>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mfeature_importancesr\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[0;31mNameError\u001b[0m: name 'feature_importancesr' is not defined"
     ]
    }
   ],
   "source": [
    "feature_importancesr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 107,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['longitude',\n",
       " 'latitude',\n",
       " 'housing_median_age',\n",
       " 'total_rooms',\n",
       " 'total_bedrooms',\n",
       " 'population',\n",
       " 'households',\n",
       " 'median_income',\n",
       " 'income_cat',\n",
       " 'rooms_per_household',\n",
       " 'population_per_household',\n",
       " 'bedrooms_per_room',\n",
       " '<1H OCEAN',\n",
       " 'INLAND',\n",
       " 'ISLAND',\n",
       " 'NEAR BAY',\n",
       " 'NEAR OCEAN']"
      ]
     },
     "execution_count": 107,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "attributes"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 108,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 0,  7,  8, 10, 13])"
      ]
     },
     "execution_count": 108,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "k = 5\n",
    "top_k_feature_indices = indices_of_top_k(feature_importances, k)\n",
    "top_k_feature_indices"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 109,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array(['longitude', 'median_income', 'income_cat',\n",
       "       'population_per_household', 'INLAND'], dtype='<U24')"
      ]
     },
     "execution_count": 109,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.array(attributes)[top_k_feature_indices]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 110,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([['0.24136048955382886', 'median_income'],\n",
       "       ['0.16197658459849276', 'income_cat'],\n",
       "       ['0.10882123891274476', 'INLAND'],\n",
       "       ['0.10627352591969835', 'population_per_household'],\n",
       "       ['0.06793261134305183', 'longitude']], dtype='<U32')"
      ]
     },
     "execution_count": 110,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "bba = sorted(zip(feature_importances, attributes), reverse=True)[:k]\n",
    "bba_np = np.array(bba)\n",
    "bba_np"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 111,
   "metadata": {},
   "outputs": [],
   "source": [
    "preparation_and_feature_selection_pipeline = Pipeline([\n",
    "    ('preparation', full_pipeline),\n",
    "    ('feature_selection', TopFeatureSelector(feature_importances, k))\n",
    "])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 112,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[-1.15604281, -0.61493744, -0.95445595, -0.08649871,  0.        ],\n",
       "       [-1.17602483,  1.33645936,  1.89030518, -0.03353391,  0.        ],\n",
       "       [ 1.18684903, -0.5320456 , -0.95445595, -0.09240499,  0.        ]])"
      ]
     },
     "execution_count": 112,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "housing_prepared_top_k_features = preparation_and_feature_selection_pipeline.fit_transform(housing)\n",
    "housing_prepared_top_k_features[0:3]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 113,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>median_income</th>\n",
       "      <th>income_cat</th>\n",
       "      <th>INLAND</th>\n",
       "      <th>population_per_household</th>\n",
       "      <th>longitude</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>-1.156043</td>\n",
       "      <td>-0.614937</td>\n",
       "      <td>-0.954456</td>\n",
       "      <td>-0.086499</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>-1.176025</td>\n",
       "      <td>1.336459</td>\n",
       "      <td>1.890305</td>\n",
       "      <td>-0.033534</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.186849</td>\n",
       "      <td>-0.532046</td>\n",
       "      <td>-0.954456</td>\n",
       "      <td>-0.092405</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>-0.017068</td>\n",
       "      <td>-1.045566</td>\n",
       "      <td>-0.954456</td>\n",
       "      <td>0.089736</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.492474</td>\n",
       "      <td>-0.441437</td>\n",
       "      <td>-0.006202</td>\n",
       "      <td>-0.004194</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   median_income  income_cat    INLAND  population_per_household  longitude\n",
       "0      -1.156043   -0.614937 -0.954456                 -0.086499        0.0\n",
       "1      -1.176025    1.336459  1.890305                 -0.033534        0.0\n",
       "2       1.186849   -0.532046 -0.954456                 -0.092405        0.0\n",
       "3      -0.017068   -1.045566 -0.954456                  0.089736        1.0\n",
       "4       0.492474   -0.441437 -0.006202                 -0.004194        0.0"
      ]
     },
     "execution_count": 113,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "housing_prepared = pd.DataFrame(housing_prepared_top_k_features, columns = bba_np[:,1])\n",
    "housing_prepared.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "第三题"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 114,
   "metadata": {},
   "outputs": [],
   "source": [
    "prepare_select_and_predict_pipeline = Pipeline([\n",
    "    ('preparation', full_pipeline),\n",
    "    ('feature_selection', TopFeatureSelector(feature_importances, k)),\n",
    "    ('final_model', RandomForestRegressor(**rnd_search.best_params_))\n",
    "])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 115,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Pipeline(memory=None,\n",
       "     steps=[('preparation', FeatureUnion(n_jobs=1,\n",
       "       transformer_list=[('num_pipline', Pipeline(memory=None,\n",
       "     steps=[('selector', DataFrameSelector(attribute_names=['longitude', 'latitude', 'housing_median_age', 'total_rooms', 'total_bedrooms', 'population', 'households', 'median_income', 'incom...imators=100, n_jobs=1, oob_score=False, random_state=None,\n",
       "           verbose=0, warm_start=False))])"
      ]
     },
     "execution_count": 115,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "prepare_select_and_predict_pipeline.fit(housing, housing_labels)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 116,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "预测值:\t [262114.   336790.02 204006.    49930.  ]\n",
      "实际值:\t\t [286600.0, 340600.0, 196900.0, 46300.0]\n"
     ]
    }
   ],
   "source": [
    "some_data = housing.iloc[:4]\n",
    "some_labels = housing_labels.iloc[:4]\n",
    "\n",
    "print(\"预测值:\\t\", prepare_select_and_predict_pipeline.predict(some_data))\n",
    "print(\"实际值:\\t\\t\", list(some_labels))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
